代码之家  ›  专栏  ›  技术社区  ›  Warrior

从xml文件中删除节点

  •  0
  • Warrior  · 技术社区  · 15 年前

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

    如何删除节点 <name>test</name> 使用xpath、xquery和php。我用了这个密码

     $name='test;
        $xmlfile="config/shop_categories.xml";
        $xml = simplexml_load_file($xmlfile);
        $target = $xml->xpath('/category[name="'.trim($name).'"]');
        print_r($target[0]);
        if($target == false)
        return; 
        $domRef = dom_import_simplexml($target[0]); //Select position 0 in XPath array
        $domRef->parentNode->removeChild($domRef);
        $dom = new DOMDocument('1.0');
        $dom->preserveWhiteSpace = false;
        $dom->formatOutput = true;
        $dom->loadXML($xml->asXML());
        $dom->save($xmlfile);
    

    但它不起作用。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Gordon Haim Evgi    15 年前

    很确定这是一个复制品,但我懒得找到它。干得好:

    $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 version="1.0"?>
    <category>
      <name>SWEATERS</name>
      <name>WATCHES</name>
      <name>PANTS</name>
    
      <name>1</name>
    </category>