【问题标题】:How to delete specific node in omnixml delphi如何在omnixml delphi中删除特定节点
【发布时间】:2012-03-23 02:58:49
【问题描述】:

我已阅读 this answer,但我不知道如何在我的案例中使用该示例。我有一个 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>

如何删除 PN=BBBB 的节点?


很抱歉,我想我的问题并不清楚,我的错, 我的问题是如何删除此部分:

 <Data>            
    <PN>BBBB</PN>
    <FN>2222</FN>
 </Data>

不只是本节

<PN>BBBB</PN>

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

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

【问题讨论】:

  • 是的,我知道这个问题,你可以在我的第一行看到上面的链接

标签: delphi omnixml


【解决方案1】:

一种方式:

  DeleteNode := OmniXML.DocumentElement.SelectSingleNode('//[PN=''BBBB'']');
  DeleteNode.ParentNode.RemoveChild(DeleteNode);

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

这是一组接口,极大地简化了 OmniXML 的使用。那么上面的例子就是:

SimpleStorage.Remove('//[PN=''BBBB'']');

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

【讨论】:

  • 您还应该在帖子中披露您是其作者;-)
  • 嗯,它没有给答案带来任何额外的价值;)
  • 你说得对,Simple Storage(我一直在推广它)和你的帖子都还可以,但我们还必须考虑这个section 的常见问题解答。再次感谢您的分享。
  • 感谢您的支持。我在回答中提到 SimpleStorage 的唯一原因是因为它对使用 XML 有很大帮助。很多人不知道,因为 OmniXML 网站上没有提到它。
  • Primoz 是您的第一个推广者(我是说 Cromis.SS)我知道:他从未错过建议人们在 OmniXML 之上使用 SS 或 GpFluentXML 的机会。 Cromis.AnyValue 和 Cromis.Threading 单元甚至在 \bag of stuff\tmonitor-vs-commqueue 下的 OmniThreadLibrary 分布中。感谢他,我遇到了 Cromis.SS。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
相关资源
最近更新 更多