如何用Java1.6读取XML中的三级节点

如何用Java1.6读取XML中的三级节点,java,xml,jakarta-ee,for-loop,xpath,Java,Xml,Jakarta Ee,For Loop,Xpath,我试图在Java中读取下面的XML,但由于XML中的元素不对称,无法读取-而且,我如何检查节点是否可用 这是XML- <?xml version="1.0" encoding="UTF-8"?> <Root> <node-path path="USA"> <property-name>Name</property-name> <property-value><![CDATA[Cat A]]

我试图在Java中读取下面的XML,但由于XML中的元素不对称,无法读取-而且,我如何检查节点是否可用

这是XML-

<?xml version="1.0" encoding="UTF-8"?>
<Root>
   <node-path path="USA">
      <property-name>Name</property-name>
      <property-value><![CDATA[Cat A]]></property-value>
       </node-path>
   <node-path path="Canada">
      <property-name>Name</property-name>
      <property-value />
   </node-path>
   <node-path path="Australia">
      <property-name>Name</property-name>
      <json-counter>1</json-counter>
      <json-property><![CDATA[Cat A]]></json-property>
      <json-property><![CDATA[Cat B]]></json-property>
      <json-property><![CDATA[Cat C]]></json-property>
      <json-counter>2</json-counter>
      <json-property><![CDATA[Cat D]]></json-property>
      <json-property><![CDATA[Cat E]]></json-property>
      <json-property><![CDATA[Cat F]]></json-property>
      <property-value />
   </node-path>
   <node-path path="UK">
      <property-name>Name</property-name>
      <property-value><![CDATA[0]]></property-value>
   </node-path>
</Root>`

名称
名称
名称
1.
2.
名称
`
这就是我正在尝试的代码-

 try {    
     File inputFile = new File("c://test.xml");
     DocumentBuilderFactory dbFactory =DocumentBuilderFactory.newInstance();
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
     Document doc = dBuilder.parse(inputFile);
     doc.getDocumentElement().normalize();

    NodeList nListNodePath = doc.getElementsByTagName("node-path");

     for (int i = 0; i < nListNodePath.getLength(); i++) {
        Node nNodePath = nListNodePath.item(i);
        if (nNodePath.getNodeType() == Node.ELEMENT_NODE) {
            Element eElement1 = (Element) nNodePath;
            System.out.println("Node Path--- : "+ eElement1.getAttribute("path"));
            System.out.println("Property Name : " + eElement1.getElementsByTagName("property-name").item(0).getTextContent());
            System.out.println("Property value : " + eElement1.getElementsByTagName("property-value").item(0).getTextContent());
            System.out.println("Json Counter : " + eElement1.getElementsByTagName("json-counter").item(0).getTextContent());
            System.out.println("JSON property : " + eElement1.getElementsByTagName("json-property").item(0).getTextContent());
        }
    } 
试试{
File inputFile=新文件(“c://test.xml”);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
Document doc=dBuilder.parse(inputFile);
doc.getDocumentElement().normalize();
NodeList nListNodePath=doc.getElementsByTagName(“节点路径”);
对于(int i=0;i
如何检查节点是否可用

返回,如果找不到元素,该方法将返回
0

对于
json计数器
json属性
,它还将返回大于
1的值,因此硬编码
项(0)
可能不是您应该做的事情


另外,使用
getElementsByTagName()
意味着提取元素时不考虑位置,因此如果
json计数器
json属性的混合序列有意义,则不能使用
getElementsByTagName()

您可以尝试使用Xpath工厂。您可以轻松地将节点强制转换为元素

import javax.xml.xpath.XPathFactory;
.
.
.
XPath xpath = XPathFactory.newInstance().newXPath();
Node node = xpath.evaluate("/root/el1/el2[@attr='123']", yourDocOrNode, XPathConstants.NODE);

如果表达式无效,xpath.evaluate将抛出XPathExpressionException,如果找不到元素,则将返回null。

什么是“无法读取”意思是?我的意思是,我无法在Java中读取上面的xml,我只是在该xml上运行了您的代码,读起来很好。当然,在
getElementsByTagName(“json计数器”)上使用NPE时,代码失败了。项(0)。getTextContent()
因为在第一个
中没有
元素,但这是不同的。XML解析时没有错误。实际上,我无法读取java-java.lang.NullPointerException中的“JSON属性”:无法调用方法getTextContent()在null对象上是的,正如我所说,当调用
getTextContent()
时,您会得到
NullPointerException
,因为
item(0)
在没有给定标记名的元素时返回null。Java可以很好地读取XML,您只需使用
getElementsByTagName()
和返回的
节点列表
错误。您能详细解释如何使用xpath读取吗?读取上述XML的最佳方法是什么?视情况而定。
元素的混合顺序重要吗?---但通常,使用
getFirstChild()为
循环编写
getNextSibling()
迭代所有子节点。是的,顺序必须相同…getFirstChild()和getNextSibling()