0

我正在使用 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>

谁能告诉我为什么?

4

1 回答 1

1

我猜有两件事在你的循环中没有按预期工作。

  1. 如果从父节点中删除子节点,其余元素的位置也会发生变化。所以在这种情况下你不应该增加i以避免跳过下一个元素。

  2. 此外,由于子元素的数量发生了变化,count 变量的值实际上不再有效。这没什么大不了的,因为您node在使用它之前正在检查,但您可能会List-item(i)i超出范围的情况下跟注。此外,您可以保存一些调用,这将提高性能,特别是对于有很多评论的大文件。

于 2012-01-29T15:15:00.753 回答