2011-09-29 20 views
2

我想刪除與在rowpath部分pathid="2"行...如何使用OmniXML刪除一個子節點?

<?xml version="1.0" encoding="utf-8"?> 
<LostPath Condition="Active" Selected="train.exe" FullPathOfSelected="D:\mygames\arcade\train\" Selected="0"> 
    <rowdir Name="train.exe" GamePath="D:\mygames\arcade\train\" Selected="0" /> 
    <rowdir Name="othelo.exe" GamePath="D:\mygames\arcade\othello\" Selected="3"/> 
    <rowpath Name="train.exe" PathId="1" LevelPath="D:\mygames\arcade\train\levelpack1" levelsFound="27" /> 
    <rowpath Name="train.exe" PathId="2" LevelPath="D:\mygames\arcade\train\levelpack21" levelsFound="19" /> 
    <rowpath Name="othelo.exe" PathId="0" LevelPath="D:\mygames\arcade\othelo\levelpack1" levelsFound="11" /> 
</LostPath> 

我怎麼能這樣做?

回答

4

試着用這個。

uses 
    OmniXML, OmniXMLUtils; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    XMLNode: IXMLNode; 
    XMLDocument: IXMLDocument; 
begin 
    XMLDocument := CreateXMLDoc; 
    if XMLLoadFromFile(XMLDocument, 'XMLFile.xml') then 
    begin 
    XMLNode := XMLDocument.SelectSingleNode('/LostPath'); 
    DeleteNode(XMLNode, 'rowpath[@PathId="2"]'); 
    XMLDocument.Save('XMLFile.xml'); 
    end; 
end; 
+0

謝謝我的朋友工作正常..我還有一個問題。如果我想刪除名稱=「train」的rowpath的所有節點,我該怎麼做.. – azrael11

2

有多種方法如何刪除所有節點具有相同屬性值。這是其中之一。但請注意,這篇文章不回答這個問題。應該作爲另一個問題提出。

uses 
    OmniXML, OmniXMLUtils; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    XMLNode: IXMLNode; 
    XMLDocument: IXMLDocument; 
begin 
    XMLDocument := CreateXMLDoc; 
    if XMLLoadFromFile(XMLDocument, 'XMLFile.xml') then 
    begin 
    XMLNode := XMLDocument.SelectSingleNode('/LostPath'); 
    DeleteAllChildren(XMLNode, 'rowpath[@Name="train.exe"]'); 
    XMLDocument.Save('XMLFile.xml'); 
    end; 
end; 
+0

當我這樣做時,我得到一個「XMLEnumNodes undeclered標識符」,但我有我的使用OmniXMLUtils ...我有德爾福7我認爲這個...在德爾福7中不工作,我說得對嗎? – azrael11

+0

@ azrael11,是的,你說得對。對不起,我錯過了Delphi 7的標籤。我會更新答案,但也會在稍後刪除它,因爲應該爲將要查找此特定問題的未來用戶單獨詢問。 – TLama

+0

非常感謝我的朋友.. – azrael11