<xxx1 xmlns="hello">
<xxx2>
<xxx3>
<name>rule_1</name>
</xxx3>
</xxx2>
</xxx1>
我通过“ // * [namespace-uri()='hello'] / * [local-name()='name']”选择节点]
它应该得到//hello:xxx1/xxx2/xxx3/name
,并且确实是。
现在我尝试获取element。实际上,我不知道<name>
的父级将获得<xxx1>
;
我尝试此代码
node.getParent().getNamespaceURI() = "Hello"
并增加getParent()
的数量以获得<xxx1>
但是我第一次调用<xxx3>.getNamespaceURI()
时会返回true
。
名称空间是否继承?
如何获取元素是否具有xmlns?
<name>
元素位于名称空间声明xmlns="hello"
的scope中,因此<name>
元素将为[[in hello
命名空间。
使用DOM4J
,您可以像这样测试元素是否在名称空间中:
boolean hasNamespace(Element e) {
return e.getNamespaceURI().length() > 0;
}
如果元素不在任何命名空间中,则getNamespaceURI()
返回一个空字符串。我想您想选择<name>
元素,但是您不知道它处于哪个级别,即它将有多少个父母。您始终可以使用此XPath表达式:
Node node = doc.selectSingleNode("//*[namespace-uri() = 'foo' and local-name() = 'name']");