如何获取具有特定属性值的特定 XML 元素?

2023-01-13Java开发问题
9

本文介绍了如何获取具有特定属性值的特定 XML 元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我正在尝试通过获取参数 type_id="4218"?? 的所有<Type>"元素从 URL 解析 XML 文件?

XML 文档:

<BSQCUBS Version="0.04" Date="Fri Dec 9 11:43:29 GMT 2011" MachineDate="Fri, 09 Dec 2011 11:43:29 +0000"><类class_id="385"><标题>足球比赛</标题><类型 type_id="4264" type_minbet="0.1" type_maxbet="2000.0">...</类型><类型 type_id="5873" type_minbet="0" type_maxbet="0">...</类型><类型 type_id="4725" type_minbet="0.1" type_maxbet="2000.0">...</类型><类型 type_id="4218" type_minbet="0.1" type_maxbet="2000.0">...</类型><类型 type_id="4221" type_minbet="0.1" type_maxbet="2000.0">...</类型><类型 type_id="4218" type_minbet="0.1" type_maxbet="2000.0">...</类型><类型 type_id="4299" type_minbet="0.1" type_maxbet="2000.0">...</类型></类></BSQCUBS>

这是我的 Java 代码:

 DocumentBuilder db = dbf.newDocumentBuilder();文档 doc = db.parse(new URL("http://cubs.bluesq.com/cubs/cubs.php?action=getpage&thepage=385.xml").openStream());doc.getDocumentElement().normalize();NodeList nodeList = doc.getElementsByTagName("Type");System.out.println("ukupno:"+nodeList.getLength());if (nodeList != null && nodeList.getLength() > 0) {for (int j = 0; j < nodeList.getLength(); j++) {元素 el = (org.w3c.dom.Element) nodeList.item(j);type_id = Integer.parseInt(el.getAttribute("type_id"));System.out.println("类型id:"+type_id);}}

这段代码给了我所有元素,我不想要那个,我想要属性 type_id = "4218" 的所有元素!

解决方案

XPath 是你的正确选择:

DocumentBuilderFactory 工厂 = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse("<你的 xml doc uri>");XPathFactory xPathfactory = XPathFactory.newInstance();XPath xpath = xPathfactory.newXPath();XPathExpression expr = xpath.compile("//Type[@type_id="4218"]");NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

并遍历nl

I am trying to parse an XML file from a URL by taking all "<Type>" elements where is parameter type_id="4218"??

XML document:

<BSQCUBS Version="0.04" Date="Fri Dec 9 11:43:29 GMT 2011" MachineDate="Fri, 09 Dec 2011 11:43:29 +0000">
  <Class class_id="385">
    <Title>Football Matches</Title>
    <Type type_id="4264" type_minbet="0.1" type_maxbet="2000.0">
      ...
    </Type>
    <Type type_id="5873" type_minbet="0" type_maxbet="0">
      ...
    </Type>
    <Type type_id="4725" type_minbet="0.1" type_maxbet="2000.0">
      ...
    </Type>
    <Type type_id="4218" type_minbet="0.1" type_maxbet="2000.0">
      ...
    </Type>
    <Type type_id="4221" type_minbet="0.1" type_maxbet="2000.0">
      ...
    </Type>
    <Type type_id="4218" type_minbet="0.1" type_maxbet="2000.0">
      ...
    </Type>
    <Type type_id="4299" type_minbet="0.1" type_maxbet="2000.0">
      ...
    </Type>
  </Class>
</BSQCUBS>

Here is my Java code:

 DocumentBuilder db = dbf.newDocumentBuilder();
 Document doc = db.parse(new URL("http://cubs.bluesq.com/cubs/cubs.php?action=getpage&thepage=385.xml").openStream());

 doc.getDocumentElement().normalize();

 NodeList nodeList = doc.getElementsByTagName("Type");
 System.out.println("ukupno:"+nodeList.getLength());
 if (nodeList != null && nodeList.getLength() > 0) {
   for (int j = 0; j < nodeList.getLength(); j++) {
     Element el = (org.w3c.dom.Element) nodeList.item(j);
     type_id = Integer.parseInt(el.getAttribute("type_id"));
     System.out.println("type id:"+type_id);
   }
 }

This code gives me all elements, I don't want that, I want all elements where the attribute type_id = "4218"!

解决方案

XPath is right choice for you:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("<Your xml doc uri>");
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("//Type[@type_id="4218"]");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

And iterate through nl

这篇关于如何获取具有特定属性值的特定 XML 元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

如何使用 JAVA 向 COM PORT 发送数据?
How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)...
2024-08-25 Java开发问题
21

如何使报表页面方向更改为“rtl"?
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)...
2024-08-25 Java开发问题
19

在 Eclipse 项目中使用西里尔文 .properties 文件
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)...
2024-08-25 Java开发问题
18

有没有办法在 Java 中检测 RTL 语言?
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)...
2024-08-25 Java开发问题
11

如何在 Java 中从 DB 加载资源包消息?
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)...
2024-08-25 Java开发问题
13

如何更改 Java 中的默认语言环境设置以使其保持一致?
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)...
2024-08-25 Java开发问题
13