2013-03-05 64 views
1

对于我的应用程序,我只需要确定根节点的名称空间,所以理想情况下我想执行单个操作来获取此名称空间。使用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,这将只是给我的根节点,没有声明根节点上的所有命名空间的命名空间?

+1

我认为VTD-XML的支持XPath功能,如命名空间URI(节点集?),你可能想看看... – 2013-03-05 21:59:36

+0

这奏效了。 'AutoPilot ap =新的AutoPilot(vn); ap.selectXPath(“namespace-uri(。)”); String ns = ap.evalXPathToString();' – 2013-03-06 02:33:13

回答

1
AutoPilot ap = new AutoPilot(vn); 
ap.selectXPath("namespace-uri(.)"); 
String ns = ap.evalXPathToString(); 
相关问题