如果父节点和子节点的名称相同,如何查找一个节点?

3

我正在进行一个项目,需要使用Java来操作XML文件。之前,我是通过节点名称,即getElementsByTagName()方法获取节点的。但是当我有一个包含相同名称的父节点和子节点的XML文件时,会出现问题。
我该如何区分它们。

这是我的xml文件的简短示例。

 <deviceparameters>
     <parameter>   // parent
        <name>ABC</name> 
        <parameter>Yes</parameter> // child with same name
        <value>20</value> 
     </parameter>
 </deviceparameters>

预先感谢您的帮助。


检查节点的 parentNode 是否具有相同的名称?如果是,则表示您位于子节点中。 - Marc B
@MarcB,有没有检查父级名称的特殊方法? - Sachin Mhetre
我不是Java程序员,但任何不是垃圾的XML库都有遍历树向上和向下的方法,其中之一是“parentNode”函数,可以获取当前节点的直接祖先。 - Marc B
一个建议 -> 最好使用与父节点相同名称的子节点作为父节点的属性,类似于这样 -> '<parameter attributeName="[Yes|No]" >//parent<name>ABC</name><value>20</value></parameter>' - Ravi Jain
1
@RaviJain 感谢您的建议,但我们必须使用这个XML格式,因为它是由我们学院提供的。 - Sachin Mhetre
1个回答

2

首先,通过名称查找deviceparameters,然后查找一个名为parameter的子元素,这是你的第一个元素,然后再查找该parameter的子元素。Javadoc将告诉您查找命名子元素所使用的方法(您可能需要循环遍历子元素)。


好的.. 但代码可能会变得有点复杂。有没有一种简单的方式,这样我就可以直接跳转到那个节点。 - Sachin Mhetre
1
我不这么认为。使用DOM的整个过程就是要进行导航。如果你使用类似XPath的东西,你只需要指定路径即可。 - Francis Upton IV
XPath 真的能减少代码量吗?XPath 和 DOM 哪个更好? - Sachin Mhetre
XPath更强大,因为您可以使用路径查询内容,您可以查看API并自行决定,但在这种情况下,您只需请求XPath位于/deviceparameters/parameter/parameter节点即可。 - Francis Upton IV
我会尝试使用XPath。谢谢帮助。 - Sachin Mhetre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接