QDom删除元素

时间:2014-02-14 01:24:26

标签: c++ xml qt dom getelementsbytagname

我使用以下代码来解析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);
}

1 个答案:

答案 0 :(得分:0)

最终这将有效。 检查ABC:

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

删除完整

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