我正在使用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()