【问题标题】:How to delete a particular XML child node based on their value如何根据其值删除特定的 XML 子节点
【发布时间】:2013-02-11 13:34:26
【问题描述】:

我有一个这样的 XML 结构:

<document>
    <sliderimage>
        <images>click.bmp</images>
        <images>error_inotherpluginupload.JPG</images>
        <images>dddd.jpg</images>
        <images>Sunset123.jpg</images>
        <images>Water lilies.jpg</images>     
    </sliderimage>
</document>

我会这样展示这些图片:

您可以在此处查看获取图像的代码:

<?php
    $usernmeforxml = $_SESSION['username'];
    $xmlpath = SITE_URL . "xml/" . $usernmeforxml . "/test.xml";
    $xml = simplexml_load_string(file_get_contents($xmlpath));
    $sliderimagesinner = $xml->sliderimage->images;
    $imagenum = count($sliderimagesinner);
?>
</br>
<?php
    for ($i = 0; $i < $imagenum; $i++)
    {
?>
    <a class="thumbnail" href="#thumb">
        <img src="../slider_images/<?php 
            echo $sliderimagesinner[$i]; 
        ?>" width="120" height="70" />
        <span>
            <img src="../slider_images/<?php 
                echo $sliderimagesinner[$i]; 
            ?>" width="500" height="350" />
        </span>
    </a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<?php
    }   
?>

现在我想通过在我的图像上添加“删除”按钮来删除图像。单击后,该图像节点应从上述 XML 文件中删除。

所有事物都是动态的,所以如果有人能在这方面帮助我,那将非常有帮助。

【问题讨论】:

  • 不是真正的答案,因为我不知道如何解决这个问题,但如果我遇到这个问题,我会开始在 PHP 的 DOM 类中寻找解决方案,其中包括一个 DOMXQuery 类. XQuery 应该可以找到满足特定条件的节点
  • 是否可以更改结构为每个图像添加一个 id 属性?这将使删除操作不那么模棱两可。
  • @GordonM 没有DOMXQuery,但DOMXPath 就足够了。
  • @fab 你说得对,我的意思是 XPath。把它归结为缺乏早晨咖啡:)

标签: php javascript xml


【解决方案1】:
$usernmeforxml=$_SESSION['username'];
$xmlpath=SITE_URL."xml/".$usernmeforxml."/test.xml";
$xml = simplexml_load_file($xmlpath);   
if($_GET['remove'] == 'true') {
    $myValue = $_GET['file'];
    $xel_array = $xml->xpath("//images[text()='" . $myValue . "']");
    //edited - forgot to double [0]
    unset($xel_array[0][0]);
    file_put_contents($xmlpath, $xml->asXML());
}

还有一个类似的链接

<a href="_your_page.php?remove=true&file=your_file_name">remove</a>

应该可以解决问题。

【讨论】:

  • 就像我在 functions.php 中使用我的查询一样,所以在这里我必须在 href 中添加类似 remove一个>
  • 您可以将代码添加到当前文件的顶部,并将 your_page.php 替换为slider.php 或您的文件被调用的任何内容,并将 your_file_name 替换为 xml 中的名称......例如:睡莲。 .jpg由于您的文件可能包含需要转义的字符,您可能需要使用 urlencode 和 urldecode。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多