【问题标题】:how to Delete parent Node of XML by checking the Value of it in PHP DOM如何通过检查 PHP DOM 中的值来删除 XML 的父节点
【发布时间】:2026-02-19 11:05:01
【问题描述】:

我有一个如下所示的 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 将非常大并且包含很多 &lt;ROW&gt;&lt;CELL&gt;&lt;DATA&gt;&lt;/Data&gt;&lt;/Cell&gt;&lt;ROW&gt;

【问题讨论】:

  • 您提供的代码对我有用。当我运行它时,我得到的 XML 没有 &lt;Row&gt; 节点有一个带有文本值 PART3&lt;Data&gt; 子节点 - 换句话说,XML 只包含包含 &lt;Row&gt; 节点绝对
  • 你能粘贴你运行的完整代码吗?我在 UNIX 上运行这个
  • 我已经运行了您的代码和您的 XML(为此将其分配给带有 HEREDOC 的变量)。它给出了很多关于未定义命名空间前缀 ss 的警告,但除此之外,它可以满足您的要求。
  • 嗨,戈登,我拥有的 XML 非常大,并且 XML 是在运行时创建的。所以我只想测试上面的 sn-p 。为此,我将其分配如下 $xmldata = " ABSOLUTEYellow.. ; 我得到一个错误你能说你是怎么分配的吗?
  • 我用的是PHP的HEREDOC syntax

标签: php xml dom xpath


【解决方案1】:

您的 XPATH 看起来正确...只是好奇,但您提到这是 XML 的示例 sn-p。可能是实际 XML 中 XML 标记的大小写略有不同,导致 XPATH 不匹配?

【讨论】:

  • 嗨 RObert.. 但是当我用这个 sn-ps 进行测试时,我也没有在这里得到输出它被完全删除了