2014-02-14 135 views
0

我已經使用下面的代碼來解析XML文件。我的目標是檢測<Name>元素是否爲「ABC」,並且我將刪除其<Malfunction>內容。但是,我的代碼只允許我在「名稱」中讀取,並使用<Name>刪除所有元素標記。QDom刪除元素

是否可以檢查<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); 
} 
+0

有沒有人誰可以在此建議?非常感激。謝謝。 – Wallace

回答

0

最終,這會工作。 檢查ABC:

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

刪除完整

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

我嘗試了你提到的代碼,但它刪除了所有''標籤。我在這裏做錯了什麼?請參閱我上面編輯的版本。 – Wallace