java - 在java中读取vtd-xml(ximpleware)xml

标签 java xml 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:南非人 2:葡萄牙 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:英语

感谢您的各种帮助 卢卡斯

最佳答案

好吧,我假设您对 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));
        }
    }
}

关于java - 在java中读取vtd-xml(ximpleware)xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44126743/

相关文章:

java - VTD-XML 似乎破坏了 XML 文档中的转义字符串

java - Maven Pom 中未使用的 osgi(org.eclipse.core.resources) 的 RPM 依赖失败

java - 在 Java 中检测操作系统 sleep 和唤醒事件

python - ElementTree find()/findall() 找不到带有命名空间的标签?

java - 从dom列表到xml文件的xml解析

vtd-xml - VTD-XML线程安全吗? (Java版本)

java - 使用 VTD-XML 删除元素后删除剩余的新行

java - 为什么@Given 不可重复?

java - 使用 Elastic Cloud/Found 随机断开与主节点 NoNodeAvailableException 的连接

android - 如何更改 ActionbarTab 的选定选项卡颜色或字体颜色?