有没有办法从巨大的xml文件(> 200 MB)中删除注释,由vtd-xml解析?
两者,根元素之前的注释
<!-- comment -->
<rootElement>
.
.
.
</rootElement>
和
中的评论<rootElement>
<book>
<!-- comment -->
</book>
</rootElement>
最好的解决方案是使用xPath。我试过了
//comment()
适用于DOM但不适用于vtd-xml
以下是我选择评论的代码
String xPath = "//comment()"
XMLModifier xm = new XMLModifier();
VTDGen vg = new VTDGen();
if (vg.parseFile(fnIn,true)){
VTDNav vn = vg.getNav();
xm.bind(vn);
nodeXpath(xPath,vn);
}
private void nodeXpath(String xPath, VTDNav vn) throws Exception{
int result;
AutoPilot ap = new AutoPilot();
ap.selectXPath(xPath);
ap.bind(vn);
while((result = ap.evalXPath())!=-1){
int p = vn.getText();
if (p!=-1) {
System.out.println(vn.getText() + ", " + vn.toString(p));
}
}
}
但这里没有任何内容打印到屏幕上。
有没有办法用vtd xml做到这一点?
感谢您的帮助。
答案 0 :(得分:0)
你提到你的代码什么都不打印到屏幕上......甚至没有逗号?我不希望它必须从getText()
打印任何内容,因为p = vn.getText()
的文档似乎表明它返回“类型字符数据或CDATA”,我认为不包括内容评论。 (谢谢你,@ vtd-xml-author,确认这一点。)
一个好的测试是在你的 xm.removeToken(result)
之前的while循环的每次迭代中打印一些东西,这样你就会知道它是否正在查找评论。
如果找到评论,我想你会想要在每一条评论上致电$(".option_price_value").each(function(){
if ($(this).text().trim().length) {
$('.main_price').hide();
console.log('has option');
} else {
$('.main_price').show();
console.log('has no option');
}
});
。