如何通过检查PHP DOM中的值来删除XML的父节点

时间:2010-06-24 16:45:31

标签: php xml dom xpath

我有一个像下面的XML

<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”,并希望删除包含该值的完整节点。所以输出应该只是如下

<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而不删除。 请帮助我如何通过搜索Value PART3删除节点,因为XML将非常大并且包含大量<ROW><CELL><DATA></Data></Cell><ROW>

1 个答案:

答案 0 :(得分:0)

你的XPATH看起来是正确的...只是好奇,但你提到这是XML的示例片段。也许实际XML中的XML标签上的外壳略有不同,导致XPATH中的不匹配?