2014-03-12 69 views
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)); 
    } 
} 
+0

如果你不能改變XPath,那麼就像我們在波士頓所說的那樣,你可能是一個年輕的鱈魚 - 也就是scrod。正常的建議是向XPath添加一個前綴,並告訴XPath引擎該前綴綁定到哪個命名空間,或者(醜陋,不推薦,但可行)將XPath重寫爲通配符,而謂詞只顯式測試本地名稱。 – keshlam

+1

如果你繼續使用vtd-xml.sf.net並從CVS檢查出最新的vtdNav.java,你應該像DOM那樣工作......需要更多指令 –

+1

@ vtd-xml-author,它工作嗎關於最新版本的VTD-XML Java實現?我正在使用com.ximpleware:vtd-xml:2.11(java版) – Mikhas

回答

1

按@ VTD-XML的作者的評論,我VTDNav.java文件的最新版本,並在我自己的項目編制。

該解決方案在第一次嘗試中就起作用了!

相關問題