给定 2 个符合相同模式的 XML 文件(均有效),一个具有命名空间,另一个没有(示例):
XML 文件 1
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message xmlns="http://www.somewhere.com/X">
<messageheader>
...
</message>
XML 文件 2
<?xml version="1.0" encoding="UTF-8"?>
<ns1:message xmlns:ns1="http://www.somewhere.com/X">
<ns1:messageheader>
...
</ns1:message>
问题在于解析文件的代码在提取和存储文本内容之前使用 Element.getNodeName() getter 来确定节点名称。由于性能原因,在解析 XML 时使用此方法而不是 XPath。
因此,实现了以下示例代码来进行解析:
for(int i = 0; i < someElement.getChildNodes().getLength(); i++) {
if(someElement.getChildNodes().item(i).getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
Element element = (Element) someElement.getChildNodes().item(i);
if(element.getNodeName().equals("ns1:messageheader")) {
...
}
...
}
}
上述代码仅适用于 XML 文件 2。
是否可以确定文件是否在元素上使用命名空间前缀,以便可以使用 getNodeName() 解析两个文件 - 所以我可以使用相同的代码来解析两个文件?
我同意这是解析 XML 的一种糟糕方式。不幸的是,我的代码是在切换到我喜欢的 JAXB 之前实现的(目前)。
谢谢
安德斯