1

有没有办法从 vtd-xml 解析的巨大 xml 文件(>200 MB)中删除评论?

两者,根元素之前的注释

<!-- 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 做到这一点?

谢谢你的帮助。

4

1 回答 1

0

您提到您的代码不会在屏幕上打印任何内容......甚至没有逗号?我不希望它一定会从 打印任何内容getText(),因为 doc forgetText()似乎表明它返回“类型字符数据或 CDATA”,我认为它不包括评论的内容。(感谢@vtd-xml-author 的确认。)

一个好的测试是在 while 循环的每次迭代中打印一些东西before p = vn.getText(),这样你就会知道它是否找到了评论。

如果它正在寻找评论,我想你会想打电话xm.removeToken(result)给每一个。

于 2015-08-19T16:36:22.233 回答