我正在构建基于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));
}
}
答案 0 :(得分:1)
根据@ vtd-xml-author评论,我获得了最新版本的VTDNav.java文件并在我自己的项目中编译。
该解决方案首次尝试!