如何删除omnixml delphi中的特定节点

Erw*_*wan 3 delphi omnixml

我已经阅读了这个答案, 但我不知道如何在我的案例中使用该样本.我有一个xml文件

 <Archive>                                  
  <Source>                               
     <Name>321</Name>                   
     <BatchID>123</BatchID>    
  </Source>                              
  <DataList>                             
     <Data>            
        <PN>AAAA</PN>
        <FN>1111</FN>
     </Data>
     <Data>            
        <PN>BBBB</PN>
        <FN>2222</FN>
     </Data>
  </DataList>                            
</Archive>
Run Code Online (Sandbox Code Playgroud)

如何删除PN = BBBB的节点?


我很抱歉,我想我不清楚我的问题,我的不好,我的问题是如何删除这一部分:

 <Data>            
    <PN>BBBB</PN>
    <FN>2222</FN>
 </Data>
Run Code Online (Sandbox Code Playgroud)

不仅是这一节

<PN>BBBB</PN>
Run Code Online (Sandbox Code Playgroud)

答案:感谢Runner,我修改了他的一些代码

  DeleteNode := XMLDoc.DocumentElement.SelectSingleNode('/Archive/DataList/Data[PN="BBBB"]');
  DeleteNode.ParentNode.RemoveChild(DeleteNode);
Run Code Online (Sandbox Code Playgroud)

Run*_*ner 5

单程:

  DeleteNode := OmniXML.DocumentElement.SelectSingleNode('//[PN=''BBBB'']');
  DeleteNode.ParentNode.RemoveChild(DeleteNode);
Run Code Online (Sandbox Code Playgroud)

您可以以任何其他方式搜索它.请注意,上面的示例仅选择第一个节点出现.但我建议你看一下SimpleStorage

这是一组接口,极大地简化了OmniXML的使用.以上示例将是:

SimpleStorage.Remove('//[PN=''BBBB'']');
Run Code Online (Sandbox Code Playgroud)

SimpleStorage还简化了使用OmniXML和XML的几乎所有其他方面.