如何按标记名称删除元素,其中包含所有元素

时间:2012-10-09 13:10:27

标签: php xml removeclass

我想在php中使用dom removeChild函数来删除标记之间的所有内容。

我的xml看起来像

<root>
  <element>text</element>

  <remove>
    text
    <morexml>text</morexml>
  </remove>
</root>

现在我要删除包含其整个内部的标记。我该怎么做呢?我没有线索。我正在尝试使用我发现的唯一dom函数:removeChild。

删除后,必须如下所示:

 <root>
      <element>text</element>

 </root>

有没有php dom功能呢?我在google或stackoverflow上找不到它。

2 个答案:

答案 0 :(得分:1)

您可以使用XPath并通过XPath删除节点。

Use DOM and XPath to remove a node from a sitemap file

PHP SimpleXML - Remove xpath node

在Stackoverflow上有很多帖子。也许你应该先在这里搜索。

答案 1 :(得分:1)

$dom = new DOMDocument;
$dom->loadXML($xml);
$dom->getElementsByTagName('root')->item(0)
   ->removeChild($dom->getElementsByTagName('remove')->item(0));

但这非常具体。如果需要更多通用性,可以使用XPath:

foreach ($xpath->query('//remove') as $node) {
   $node->parentNode->removeChild($node);
}