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