Php 从xml文件中删除节点

Php 从xml文件中删除节点,php,dom,xpath,Php,Dom,Xpath,我有一个xml文件 <?xml version="1.0"?> <category> <name>SWEATERS</name> <name>WATCHES</name> <name>PANTS</name> <name>test</name> <name>1</name> </category> 但它不起作用。很确定这

我有一个xml文件

<?xml version="1.0"?>
<category>
  <name>SWEATERS</name>
  <name>WATCHES</name>
  <name>PANTS</name>
  <name>test</name>
  <name>1</name>
</category>

但它不起作用。

很确定这是一个副本,但我太懒了,找不到它。给你:

$xml = <<< XML
<?xml version="1.0"?>
<category>
  <name>SWEATERS</name>
  <name>WATCHES</name>
  <name>PANTS</name>
  <name>test</name>
  <name>1</name>
</category>
XML;

$dom = new DOMDocument;
$dom->loadXML($xml);
$xPath = new DOMXPath($dom);
foreach($xPath->query('//name[text() = "test"]') as $node) {
    $node->parentNode->removeChild($node);
}
echo $dom->saveXML();
$xml=query('//name[text()=“test”]')作为$node){
$node->parentNode->removeChild($node);
}
echo$dom->saveXML();
输出:

<?xml version="1.0"?>
<category>
  <name>SWEATERS</name>
  <name>WATCHES</name>
  <name>PANTS</name>

  <name>1</name>
</category>

毛衣
监视
裤子
1.

主要问题是XPath查询返回的是
类别
节点,而不是预期的
名称
。Gordon的回答(在撰写本文时)没有提到这一点,但解决了这个问题。@Sala没错,实际上我没有注意这个细节,因为dom mishmash的simplexml对我来说毫无意义。@Gordon,别担心。现在OP有了答案和解决方案。:)@托马斯:你的问题是关于DOM方法的。XPath用于查询XML文档,而不是转换。@Alejandro它当然不是关于xquery,但肯定是关于XPath,因为这是传递给DOM方法的内容,也是本例中的问题所在。
<?xml version="1.0"?>
<category>
  <name>SWEATERS</name>
  <name>WATCHES</name>
  <name>PANTS</name>

  <name>1</name>
</category>