在 java 中读取 vtd-xml (ximpleware) xml
read vtd-xml (ximpleware) xml in java
我尝试使用 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: 非洲人
2:葡萄牙语
3: 意大利语
我该怎么做?
我阅读了以下 , 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: 英语
感谢您的各种帮助
卢卡斯
好的,我假设您相当了解 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));
}
}
}
我尝试使用 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: 非洲人 2:葡萄牙语 3: 意大利语
我该怎么做?
我阅读了以下
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: 英语
感谢您的各种帮助 卢卡斯
好的,我假设您相当了解 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));
}
}
}