2017-05-23 75 views
1

我嘗試使用Ximpleware讀取XML文件。我的問題是,我沒有找到有用的例子或教程。在java中閱讀vtd-xml(ximpleware)xml

我想讀下面的XML:

<title name="bliblablu"> 
     <program> 
      <text lang="1"> 
       <![CDATA[English]]> 
      </text> 
      <text lang="2"> 
       <![CDATA[Francais]]> 
      </text> 
      <text lang="3"> 
       <![CDATA[Deutsch]]> 
      </text> 
     </program> 
     <program> 
      <text lang="1"> 
       <![CDATA[Afrikans]]> 
      </text> 
      <text lang="2"> 
       <![CDATA[Portuges]]> 
      </text> 
      <text lang="3"> 
       <![CDATA[Italiano]]> 
      </text> 
     </program> 
    </title> 

而我要的是一個簡單的打印出如下圖所示。

1:英語 2:法語 3:德語 1:Afrikans 2:Portuges 3:意大利語

我怎樣才能做到這一點? 我看了下面的SO Answer,SO Answer。 我試着用下面的代碼,但它不起作用。

import com.ximpleware.AutoPilot; 
import com.ximpleware.NavException; 
import com.ximpleware.VTDGen; 
import com.ximpleware.VTDNav; 
import com.ximpleware.XPathEvalException; 
import com.ximpleware.XPathParseException; 
... 


final VTDGen vg = new VTDGen(); 
vg.parseFile(file.getAbsolutePath(), false); 
VTDNav vn = vg.getNav(); 
final AutoPilot ap = new AutoPilot(vn); 
ap.selectXPath("/title/program/text"); 

Log.d(ap.evalXPathToString()); 

int i = 0, j = 0; 
String languageNr = "", languageText =""; 

while ((i = ap.evalXPath()) != -1) { 
    j = vn.getAttrVal("lang"); 

    // z = vn.toNormalizedString(i); 
    if (j != -1) { 
     languageNr = vn.toString(j); 
     AutoPilot ap2 = new AutoPilot(vn); 
     ap2.resetXPath(); 
     ap2.selectXPath("/ticker/program/text"); 
     ap2.selectElement(Integer.toString(j)); 
     languageText = ap2.evalXPathToString(); 

    } 
    Log.d(languageNr); 
    Log.d(languageText); 
} 

我的輸出是:

1:英語 2:英語 3:英語 1:英語 2:英語 3:英語

感謝每一種幫助 盧卡斯

+0

如何讀取的Java XML文件在此說明https://www.mkyong.com/java/how- to-read-xml-file-in-java-dom-parser/ –

回答

1

好的,我假設你知道xpath合理地好...所以我不明白爲什麼你需要另一個AutoPilot ...這是第一個版本ñ。

import com.ximpleware.*; 
public class simpleRead { 
    public static void main(String s[]) throws VTDException{ 
     VTDGen vg = new VTDGen(); 
     if (!vg.parseFile("d:\\xml\\title.xml", false)){ 
      return; 
     } 
     VTDNav vn = vg.getNav(); 
     AutoPilot ap = new AutoPilot(vn); 
     ap.selectXPath("/title/program/text/text()"); 
     int i=0; 
     while((i=ap.evalXPath())!=-1){ 
      System.out.print(" "+vn.toString(i)); 
     } 
    } 
} 

這裏是做同樣的事情第二個版本......

import com.ximpleware.*; 
public class simpleRead { 
    public static void main(String s[]) throws VTDException{ 
     VTDGen vg = new VTDGen(); 
     if (!vg.parseFile("d:\\xml\\title.xml", false)){ 
      return; 
     } 
     VTDNav vn = vg.getNav(); 
     AutoPilot ap = new AutoPilot(vn); 
     ap.selectXPath("/title/program/text"); 
     int i=0; 
     while((i=ap.evalXPath())!=-1){ 
      int k=vn.getText(); 
      if (k!=-1) 
      System.out.print(" "+vn.toString(k)); 
     } 
    } 
} 
+0

謝謝你的幫助!它工作完美。 – lukas

+0

教程和示例是vtd-xml分發的一部分,請檢查zip文件中的一個子文件夾 –