我正在使用xerces 2.8.0。我想从文档中删除评论节点。
List = root->getChildNodes();
int count = List->getLength();
int i = 0;
while (i < count)
{
DOMNode* node = List->item(i);
if(node != 0 && node->getNodeType() == DOMNode::COMMENT_NODE)
{
cout<<"comment node found"<<endl;
root->removeChild(node);
}
i++;
}
如果我的输入具有以下格式,则此代码可以正常工作:
<?xml version="1.0"?>
<root><!-- comment --><node1>txt</node1></root>
但是如果输入文件具有如下所示的“漂亮”格式,则它不起作用:
<?xml version="1.0"?>
<root>
<!-- comment -->
<node1>txt</node1>
</root>
谁能告诉我为什么?
答案 0 :(得分:1)
我猜你的循环中有两件事没有按预期工作。
如果从父节点中删除子节点,则其余元素的位置也会发生变化。所以在这种情况下你不应该增加i
以避免跳过下一个元素。
此外,当子元素的数量发生变化时,count变量的值实际上不再有效。这不是什么大问题,因为您在使用它之前检查node
,但是您可能会在List-item(i)
i
之外调用{{1}}超出范围。此外,您可以保存一些调用,这会增加性能,特别是对于大文件,如果他们有很多评论。