1
我正在構建基於VTD的XML分析引擎,以處理來自多個輸入系統的文件。如何在VTD Xpath查找中加入命名空間前綴
我目前正在試圖從命名空間前綴標籤獲取值:
<?xml version="1.0" encoding="UTF-8"?>
<cli:clients xmlns declarations >
<cli:client>
<dat:name>CLIENT NAME</dat:name>
<dat:age>1</dat:age>
</cli:client>
和查詢以下的XPath:
//client/age/text()
//client/name/text()
如何設置VTD自動駕駛忽視命名空間前綴?
注意:我無法更改xpaths,因爲我已經使用JDK的默認xpath引擎實現了生產中的此引擎。
UPDATE:請參閱下面我用來測試的代碼。文件類似於頂部的一個:
@Test
public void doFile() throws Exception {
byte[] xmlData = FileUtils.loadFile("namespace-test.xml");
VTDGen gen = new VTDGen();
gen.setDoc(xmlData);
gen.parse(false);
VTDNav vtd = gen.getNav();
AutoPilot pilot = new AutoPilot(vtd);
pilot.selectXPath("//clients");
int re = pilot.evalXPath();
System.out.println(re);
if (re >= 0) {
System.out.println(vtd.toString(re));
}
}
如果你不能改變XPath,那麼就像我們在波士頓所說的那樣,你可能是一個年輕的鱈魚 - 也就是scrod。正常的建議是向XPath添加一個前綴,並告訴XPath引擎該前綴綁定到哪個命名空間,或者(醜陋,不推薦,但可行)將XPath重寫爲通配符,而謂詞只顯式測試本地名稱。 – keshlam
如果你繼續使用vtd-xml.sf.net並從CVS檢查出最新的vtdNav.java,你應該像DOM那樣工作......需要更多指令 –
@ vtd-xml-author,它工作嗎關於最新版本的VTD-XML Java實現?我正在使用com.ximpleware:vtd-xml:2.11(java版) – Mikhas