Q删除元素

QDom Remove Element

本文关键字:元素 删除      更新时间:2023-10-16

我使用以下代码来解析XML文件。我的目的是检测<Name>元素是否为"ABC",我将删除其<Malfunction>内容。但是,我的代码只允许我读取"名称"并删除所有带有 <Name> 的元素标签。

是否可以检查<Name>元素标签是否包含"ABC"并删除<Malfunction></Malfunction>标签中的内容,包括标签本身?

任何帮助,不胜感激。谢谢。

。.cpp:

QDomNodeList nodes = doc.elementsByTagName("Name");
while(!nodes.isEmpty())
{
    QDomNode node = nodes.at(0);
    node.parentNode().removeChild(node);
}

。.xml:

<InjectedMalfunctions>
 <Malfunction>
  <Segment>ABC</Segment>
  <Name>ABC failure</Name>
  <Time>00:00:00</Time>
 </Malfunction>
 <Malfunction>
  <Segment>DEF</Segment>
  <Name>DEF failure</Name>
  <Time>00:00:00</Time>
 </Malfunction>
</InjectedMalfunctions>

输出.xml:

<InjectedMalfunctions>
 <Malfunction>
  <Segment>ABC</Segment>
  <Time>00:00:00</Time>
 </Malfunction>
 <Malfunction>
  <Segment>DEF</Segment>
  <Time>00:00:00</Time>
 </Malfunction>
</InjectedMalfunctions>

通缉.xml:

<InjectedMalfunctions>
 <Malfunction>
  <Segment>DEF</Segment>
  <Name>DEF failure</Name>
  <Time>00:00:00</Time>
 </Malfunction>
</InjectedMalfunctions>

以下代码删除所有<Malfunction>标记,而不仅仅是第一个<Malfunction>组。

编辑.cpp:

QDomNodeList nodes = doc.elementsByTagName("Name");
while(!nodes.isEmpty())
{
    QDomNode node = nodes.at(0);
    node.nodeValue().contains("ABC");
    QDomNode toRemove = node.parentNode();
    toRemove.parentNode().removeChild(toRemove);
}

最终这将起作用。检查 ABC:

node.nodeValue().contains("ABC");

删除完成

QDomnode toRemove = node.parentNode();
toRemove.parentNode().removeChild(toRemove);