Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php使用DOMDocument删除xml节点_Php_Xml_Simplexml_Domdocument - Fatal编程技术网

php使用DOMDocument删除xml节点

php使用DOMDocument删除xml节点,php,xml,simplexml,domdocument,Php,Xml,Simplexml,Domdocument,[因问题不明确而更新] 谢谢你指出这一点@hakre 我的问题是,我的脚本: 或者它无法删除我想要的xml节点 或者删除节点,但不将其保存到文件中 我有这个xml文档: <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.2"> <Document> <Placemark> <n

[因问题不明确而更新] 谢谢你指出这一点@hakre

我的问题是,我的脚本:

  • 或者它无法删除我想要的xml节点
  • 或者删除节点,但不将其保存到文件中
  • 我有这个xml文档:

        <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://earth.google.com/kml/2.2">
        <Document>
            <Placemark>
                <name>Chelsea</name>
                <Snippet>London</Snippet>
                <Point>
                    <coordinates>-0.2, 51.2,0.000000</coordinates>
                </Point>
                <id>1</id>
            </Placemark>
            <Placemark>
                <name>World</name>
                <Snippet>Willingdon </Snippet>
                <Point>
                    <coordinates>-0.2,50.2,0.000000</coordinates>
                </Point>
                <id>2</id>
            </Placemark>
        </Document>
    </kml>
    
    我正在尝试使用ID删除Placemark,这是我的delete.php:

    function send2del(d){
                $.ajax({
                    url : 'delete.php',
                    type : 'POST',
                    data : { what : $(d).data('id') },
                    success : function(){
                           $(d).closest('tr').fadeOut('slow');
                    }
                });
                return false;
            };
    
    <?php
    if (isset($_POST['what'])) { 
        $id = $_POST['what']; 
        $doc = new DOMDocument; 
        $doc->load('placemarks.xml');
    
        $shops = $doc->getElementsByTagName('Placemark');
        foreach ($shops as $shop) {
            $ids = $shop->getElementsByTagName('id');
            if ($ids->item(0)->nodeValue == $id) {
                $shop->parentNode->removeChild($shop);
            } 
        }
        echo $doc->saveXML();
      }  
    ?>
    
    getElementsByTagName('Placemark');
    foreach($shop作为$shop){
    $id=$shop->getElementsByTagName('id');
    如果($ids->item(0)->nodeValue==$id){
    $shop->parentNode->removeChild($shop);
    } 
    }
    echo$doc->saveXML();
    }  
    ?>
    
    但它不起作用。
    我尝试使用simpleXML,但没有成功。你能给我一些关于这个问题的指导方针吗?或者,如果您能帮助我使用simpleXML解决方案,我将非常感激。

    我测试了您的代码。它删除基于它的元素。也许问题在于所使用的ID

    前后:

    之前:

    <kml xmlns="http://earth.google.com/kml/2.2">
    <document>
    <placemark>
    <name>Chelsea</name>
    <snippet>London</snippet>
    <point>
    <coordinates>-0.2, 51.2,0.000000</coordinates>
    </point>
    <id>1</id>
    </placemark>
    <placemark>
    <name>World</name>
    <snippet>Willingdon </snippet>
    <point>
    <id>2</id>
    </placemark>
    </document>
    </kml>
    
    
    切尔西
    伦敦
    -0.2, 51.2,0.000000
    1.
    世界
    威灵顿
    2.
    
    之后:

    <kml xmlns="http://earth.google.com/kml/2.2">
    <document>
    <placemark>
    <name>World</name>
    <snippet>Willingdon </snippet>
    <point>
    <coordinates>-0.2,50.2,0.000000</coordinates>
    </point>
    <id>2</id>
    </placemark>
    </document>
    </kml>
    
    
    世界
    威灵顿
    -0.2,50.2,0.000000
    2.
    
    您需要调试代码。例如,值是否转移到PHP脚本中,并且是否以您期望的格式提供?这最好是通过像xdebug这样的step调试器来完成的。顺便说一句,你可以在程序运行时查看程序内部,并逐步查看所有变量以及它们如何变化等等。它似乎得到了我需要的参数,
    foreach($shop as$shop){$id=$shop->getElementsByTagName('id');if($id->item(0)->nodeValue==$id){echo“我找到了它:”。$shop->getElementsByTagName('name')->item(0)->nodeValue;}}}
    给出了我期望的结果。只是我不知道如何删除Placemark节点并保存它。您需要使用
    save
    方法,而不是
    saveXML
    。看见顺便说一句,从你的问题中我完全不清楚,我觉得文档中的元素没有被删除,但你只是关心保存,对吗?谢谢,也许我不够清楚。老实说,我不知道是否有一个元素被移除了。所以我不确定问题出在哪里。我有
    echo$doc->saveXML()但是当我使用
    $doc->save('placemarks.xml')
    时,它工作了。这更多的是一个注释而不是一个答案。我认为我的id参数是可以的,这个参数返回了我所期望的<代码>$shop->getElementsByTagName('name')->项(0)->节点值