对于我的应用程序,我只需要确定根节点的命名空间,所以理想情况下我想执行一个操作来获取这个命名空间。
我的代码使用XPath来获取声明的所有命名空间(/*/namespace::*
),但是我必须完成它们并为每个命名空间执行vn.toRawString以将其与我的前缀进行比较,我想避免。
我确定我在这里遗漏了一些明显的东西,但是获取给定元素的命名空间的最佳方法是什么,因为在getAttrValNS中不考虑xmlns:属性?
String elementName = vn.toRawString(vn.getCurrentIndex());
String prefix = prefix(elementName);
String localName = localName(elementName);
QName rootQName;
if (prefix == null) {
rootQName = new QName(localName);
} else {
int nsIndex = vn.getAttrValNS("xmlns", prefix);
// Can't find index because xmlns attributes are not included
String namespace = vn.toRawString(nsIndex);
rootQName = new QName(namespace, localName);
}
是否有一个简单的XPath只会给我根节点的命名空间,而不是根节点上的所有命名空间DECLARED?
答案 0 :(得分:1)
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("namespace-uri(.)");
String ns = ap.evalXPathToString();