使用VTD-XML查找给定元素的命名空间

时间:2013-03-05 21:17:03

标签: vtd-xml

对于我的应用程序,我只需要确定根节点的命名空间,所以理想情况下我想执行一个操作来获取这个命名空间。

我的代码使用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?

1 个答案:

答案 0 :(得分:1)

AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("namespace-uri(.)");
String ns = ap.evalXPathToString();