gpt4 book ai didi

c++ - 使用 xerces-c 删除不需要的节点

转载 作者:行者123 更新时间:2023-11-28 08:11:10 24 4
gpt4 key购买 nike

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

谁能告诉我为什么?

最佳答案

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

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

  2. 此外,计数变量的值实际上不再有效,因为子元素的数量已更改。这没什么大不了的,因为你在使用它之前检查了 node 但你可能正在调用 List-item(i)i超出范围。此外,您可以保存一些调用,这将提高性能,尤其是对于有大量评论的大文件。

关于c++ - 使用 xerces-c 删除不需要的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9034969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com