处理没有命名空间的节点

时间:2016-12-12 12:19:05

标签: java xml xpath namespaces

最近,我们遇到了一些不寻常的XML问题。 假设,XML看起来像

<rootNode>
    <childNode xmlns = "http://default.namespace.com">
        <targetNode>
            some_text
        </targetNode>
    </childNode>
</rootNode>

我们的目标是通过XPath从此XML获取 some_text 。 如您所见, rootNode 根本没有名称空间,但另一个节点具有默认名称空间。

通常,我们对XPath(在NameSpace上下文中)的方法如下:我们首先循环抛出文档并收集所有名称空间和前缀。然后我们将此信息设置为 NamespaceContext ,并计算XPath。在此之前感到高兴。

在这种情况下,这样的XPath来获取 some_text

/rootNode/childNode/targetNode

无效,导致Java认为 rootNode 还有http://default.namespace.com命名空间,这是不正确的。

所以,问题是:在这种情况下如何编写正确的XPath?

到目前为止,我们发现只有这种解决方法:写了类似

的内容
/NonExistingPrefix:rootNode/childNode/targetNode

这是有效的,因为文档没有 NonExistingPrefix 的命名空间,并且因为这个Java对待

/NonExistingPrefix:rootNode

作为

pure /rootNode without namespace

- 正是我们需要的。

但这种做法看起来很丑陋。

0 个答案:

没有答案