首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除节点的父节点

删除节点的父节点
EN

Stack Overflow用户
提问于 2010-06-21 07:18:33
回答 2查看 493关注 0票数 0

我有xml,结构是这样的

代码语言:javascript
复制
<element>
    <x>
        <y>
            <z>Value</z>
        </y>
    </x>
</element>

我通过这个xpath查询- //*[name()='z']选择了all <z>-tags from xml。

然后我处理每个查找节点,如果它不能满足某些要求,就需要删除整个X-tag (如果你喜欢,可以删除它的祖辈:)。

代码语言:javascript
复制
foreach ($x->query("//*[name()='z']") as $elm)
{

if ($elm !== good)
{

//need to delete whole X-tag here

}


}

那么,我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2010-06-21 07:22:17

也许吧

代码语言:javascript
复制
$elm->parentNode->parentNode->parentNode->
    removeChild($elm->parentNode->parentNode);

顺便说一下,您可以使用

代码语言:javascript
复制
foreach ($x->query("//z") as $elm)

而不是。

票数 1
EN

Stack Overflow用户

发布于 2010-06-21 11:48:08

我认为你把两个类的方法混在一起了。

SimpleXMLElement::removeChild不存在(它是DOMNode的一部分)。不幸的是,DOMDocument::xpath也不存在,所以如果不修改代码就不能使用它们。

我选择DOMDocument是因为DOM选择的简单性(只需要标记名称中的元素),下面是我的结果:

代码语言:javascript
复制
<?php

    $bad = 'Value';
    $doc = DOMDocument::load('./xpath_del.xml') or die('Failed parsing XML');
    $x   = $doc->getElementsByTagName('x');

    for ($i = 0; $i < $x->length; ++$i) {
        $z = $x->item($i)->getElementsByTagName('z');
        for ($j = 0; $j < $z->length; ++$j) {
            if ($bad === $z->item($i)->nodeValue) {
                $x->item($i)->parentNode->removeChild($x->item($j));
                break;
            }
        }
    }

?>

因此,将转换为SimpleXMLElement用于调试目的(因为我懒得在DOMDocument中编写遍历DOMNode的方法):

代码语言:javascript
复制
var_dump(simplexml_import_dom($doc));

输出之前和之后的DOMDocument结构。请记住,如果这是一个高流量的网站,我绝对建议不要把这段调试代码留在里面(但这对你可能无关紧要)。

无论如何,以下是之前的结果:

代码语言:javascript
复制
object(SimpleXMLElement)#2 (1) {
  ["x"]=>
  object(SimpleXMLElement)#3 (1) {
    ["y"]=>
    object(SimpleXMLElement)#4 (1) {
      ["z"]=>
      string(5) "Value"
    }
  }
}

在此之后:

代码语言:javascript
复制
object(SimpleXMLElement)#5 (0) {
}

自己试一试,;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3081281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档