如何在VTD Xpath查找上忽略名称空间前缀

时间:2014-03-12 18:38:55

标签: java xml xml-parsing xml-namespaces vtd-xml

我正在构建基于VTD的XML解析引擎,以便处理来自多个输入系统的文件。

我目前正在尝试从带有名称空间前缀的标记中获取值:

<?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 AutoPilot忽略命名空间前缀?

注意:我无法更改xpath,因为我已经使用JDK的默认xpath引擎实现了这个引擎。

更新:请参阅下面我用来测试的代码。文件类似于顶部的文件:

@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));
    }
}

1 个答案:

答案 0 :(得分:1)

根据@ vtd-xml-author评论,我获得了最新版本的VTDNav.java文件并在我自己的项目中编译。

该解决方案首次尝试!