Как удалить определенный узел в omnixml Delphi - PullRequest
3 голосов
/ 23 марта 2012

Я прочитал этот ответ , но я не знаю, как использовать этот образец в моем случае.У меня есть 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>

не только этоsection

<PN>BBBB</PN>

Ответ: Благодаря Runner я немного изменил его код

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

1 Ответ

5 голосов
/ 23 марта 2012

В одну сторону:

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

Вы можете искать его любым другим способом. Обратите внимание, что в приведенном выше примере будет выбран только первый узел. Но я рекомендую вам взглянуть на SimpleStorage

Это набор интерфейсов, которые значительно упрощают работу с OmniXML. Приведенный выше пример будет:

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

SimpleStorage также упрощает практически все остальные аспекты использования OmniXML и XML в целом.

...