1

我正在构建一个基于 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));
    }
}
4

1 回答 1

2

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

该解决方案在第一次尝试时有效!

于 2014-03-17T14:39:48.540 回答