2013-03-05 66 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(); 
相關問題