我有一个像下面的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>
答案 0 :(得分:0)
你的XPATH看起来是正确的...只是好奇,但你提到这是XML的示例片段。也许实际XML中的XML标签上的外壳略有不同,导致XPATH中的不匹配?