使用 w3c DOM 和元素顺序解析 XML



我正在使用java w3c DOM库来解析XML文档。

XML 文档的一部分如下所示:

<pin direction="output" id="out0" index="0" type="org.opencv.core.Mat">
<property class="java.lang.String" name="tooltip"><![CDATA[, output image]]></property>
<property class="java.util.UUID" name="uuid"><![CDATA[4a729579-e4f4-4e5c-8522-025701e19039]]></property>
<property class="java.lang.Class" name="blockClass"><![CDATA[class org.obbb.model.Pin]]></property>
</pin>
<pin direction="output" id="out1" index="1" type="java.lang.String">
<property class="java.lang.String" name="tooltip"><![CDATA[, filename]]></property>
<property class="java.util.UUID" name="uuid"><![CDATA[88f616b6-4baf-423d-b2af-8df48ef25184]]></property>
<property class="java.lang.Class" name="blockClass"><![CDATA[class org.obbb.model.Pin]]></property>
</pin>
<pin direction="output" id="out2" index="2" type="java.lang.String">
<property class="java.lang.String" name="tooltip"><![CDATA[, file path]]></property>
<property class="java.util.UUID" name="uuid"><![CDATA[1ca31982-6dea-4f48-8781-7f8194ba874a]]></property>
<property class="java.lang.Class" name="blockClass"><![CDATA[class org.obbb.model.Pin]]></property>
</pin>

在这个结构中,我需要解析哈希代码:

4a729579-e4f4-4e5c-8522-025701e19039

88f616b6-4baf-423d-b2af-8df48ef25184

1ca31982-6dea-4f48-8781-7f8194ba874a

我的代码是:

for (int i = 0; i < pinsLength; i++) {
Node pin = pins.item(i);
if ( pin.getNodeType() == Node.ELEMENT_NODE ) {
Element pinElement = (Element)pin;
String uuid = pinElement.getChildNodes().item(1).getTextContent();
}
}

哈希代码是否将始终保存在uuid variable中,因为它始终是 XML 文件中的第二个属性元素?

我不会指望这个。您可以在元素之间获取一些额外的节点。例如,有人可能认为添加评论是个好主意:

<pin direction="output" id="out1" index="1" type="java.lang.String">
<property class="java.lang.String" name="tooltip"><![CDATA[, filename]]></property>
<!-- Best UUID of all times -->
<property class="java.util.UUID" name="uuid"><![CDATA[88f616b6-4baf-423d-b2af-8df48ef25184]]></property>
<property class="java.lang.Class" name="blockClass"><![CDATA[class org.obbb.model.Pin]]></property>
</pin>

因此,如果您的 XML结构将永远保持不变,那么从本质上讲,这可能会起作用,但我不会指望它。此外,硬编码以后可能很难更改。

相反,您可以做的是使用 XPath 检索数据。有关快速入门,请参阅此问题:

如何在 Java 中使用 XPath 读取 XML

你需要一个像这样的XPath:

//pin/property[@name='uuid']/text()

最新更新