使用 vtd-xml 从 xml 文件中删除评论,删除评论
Removing comments from xml file with vtd-xml , delete comment
有没有办法从 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 做到这一点?
感谢您的帮助。
您提到您的代码不会在屏幕上打印任何内容...甚至连逗号都没有?我不希望它一定会打印 getText()
中的任何内容,因为 getText()
的文档似乎表明它 returns "the type character data or CDATA",我认为这不包括评论的内容。 (感谢@vtd-xml-作者确认这一点。)
一个好的测试是在 while 循环 before p = vn.getText()
的每次迭代中打印一些内容,这样您就会知道它是否找到了注释。
如果要查找评论,我想您会希望对每个评论都调用 xm.removeToken(result)
。
有没有办法从 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 做到这一点?
感谢您的帮助。
您提到您的代码不会在屏幕上打印任何内容...甚至连逗号都没有?我不希望它一定会打印 getText()
中的任何内容,因为 getText()
的文档似乎表明它 returns "the type character data or CDATA",我认为这不包括评论的内容。 (感谢@vtd-xml-作者确认这一点。)
一个好的测试是在 while 循环 before p = vn.getText()
的每次迭代中打印一些内容,这样您就会知道它是否找到了注释。
如果要查找评论,我想您会希望对每个评论都调用 xm.removeToken(result)
。