使用vtd-xml从xml文件中删除注释,删除注释

时间:2015-08-17 16:02:50

标签: xml xpath vtd-xml

有没有办法从巨大的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做到这一点?

感谢您的帮助。

1 个答案:

答案 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'); } });