2010-06-24 67 views
1

刪除XML的父節點我有一個XML像下面如何通過檢查它的價值在PHP DOM

<Row><Cell ss:StyleID="s245"><Data ss:Type="String">ABSOLUTE</Data></Cell> 
<Cell ><Data ss:Type="String">Yellow</Data></Cell> 
<Cell ><Data ss:Type="String">Exist</Data></Cell> 
<Cell ><Data ss:Type="Number">30</Data></Cell> 
<Cell ss:StyleID="s258"/> 
</Row> 
<Row><Cell ss:StyleID="s229"><Data ss:Type="String">PART3</Data></Cell> 
<Cell ><Data ss:Type="String">Part3 Description</Data></Cell> 
<Cell ><Data ss:Type="String">Buy_Part</Data></Cell> 
<Cell ><Data ss:Type="Number">0</Data></Cell> 
<Cell ss:StyleID="s258"/> 
</Row> 
<Row ss:AutoFitHeight="0" ss:Height="13.5"><Cell ss:StyleID="s245"><Data ss:Type="String">PART3</Data></Cell> 
<Cell ><Data ss:Type="String">Part3 Description</Data></Cell> 
<Cell ><Data ss:Type="String">Buy_Part</Data></Cell> 
<Cell ><Data ss:Type="Number">0</Data></Cell> 
<Cell ss:StyleID="s258"/> 
</Row> 

我要刪除XML搜索的節點內部值的節點上。

示例我想在上面的示例中搜索值「PART3」,並且想要刪除包含該值的COmplete節點。所以輸出應該只有如下

<Row><Cell ss:StyleID="s245"><Data ss:Type="String">ABSOLUTE</Data></Cell> 
<Cell ><Data ss:Type="String">Yellow</Data></Cell> 
<Cell ><Data ss:Type="String">Exist</Data></Cell> 
<Cell ><Data ss:Type="Number">30</Data></Cell> 
<Cell ss:StyleID="s258"/> 
</Row> 

我寫了下面的腳本

$doc = new DOMDOcument; 
    $doc->loadxml($xmldata); 
    $item_id = "PART3"; 
    $xpath = new DOMXpath($doc); 
    foreach($xpath->query('//Row[Cell/Data="' . $item_id . '"]') as $node) { 
    $node->parentNode->removeChild($node); 
} 
echo $doc->savexml(); 

但它顯示完整的XML而不刪除。 請幫助我如何刪除節點通過搜索值PART3,因爲XML將是非常大,它包含很多<ROW><CELL><DATA></Data></Cell><ROW>

+0

你給的代碼適合我。當我運行它時,我得到的XML不帶''節點,其中有''孩子,文本值* PART3 * - 換句話說,XML只包含''包含* ABSOLUTE * – Gordon 2010-06-24 17:06:22

+0

的節點可以粘貼你已經運行完整的代碼..我在UNIX中運行這個 – 2010-06-24 17:15:49

+0

我已經運行你的代碼和你的XML(用HEREDOC把它分配給這個變量)。它提供了很多有關名稱空間前綴ss沒有被定義的警告,但除此之外,它會按照您的要求進行操作。 – Gordon 2010-06-24 17:18:22

回答

0

XPATH看起來正確...只是好奇,但你提到,這是一個樣本XML片段。實際XML中XML標籤的外殼可能略有不同,導致XPATH中的錯誤匹配?

+0

嗨RObert .. 但是,當我用這個片段測試也沒有得到輸出在這裏它被完全刪除 – 2010-06-24 17:48:29