访问父元素的访问权限 PHP SimpleXML?

我经过一组对象 SimpleXML 而且我无法理解如何访问每个对象的父节点。 这就是我要的:


$divs = simplexml->xpath/"//div"/;
foreach /$divs as $div/
{
$parent_div = $div->get_parent_node//; // Sadly, there's no such function.
}


似乎应该有一种相当简单的方法来做到这一点。
已邀请:

小姐请别说爱

赞同来自:

您可以运行一个简单的请求。 XPath, 为拿到它,为实现它:


$parent_div = $div->xpath/"parent::*"/;


和那样 Simplexml, 它只有元素和属性的节点,父节点只能是一个元素和永远不会属性,可以使用缩写语法:


$parent_div = $div->xpath/".."/;


/穿过:

http://hakre.wordpress.com/201 ... heet/
/ /

裸奔

赞同来自:

$div->get_parent_node//; // Sadly, there's no such function.


请注意,您可以扩展 SimpleXML, 这样做。 例如:


class my_xml extends SimpleXMLElement
{
public function get_parent_node//
{
return current/$this->xpath/'parent::*'//;
}
}


现在你需要做的一切都是改变你用来创建你的代码 SimpleXMLElement 首先:


$foo = new SimpleXMLElement/'<foo></foo>'/;
// becomes
$foo = new my_xml/'<foo></foo>'/;

$foo = simplexml_load_string/'<foo></foo>'/;
// becomes
$foo = simplexml_load_string/'<foo></foo>', 'my_xml'/;

$foo = simplexml_load_file/'foo.xml'/;
// becomes
$foo = simplexml_load_file/'foo.xml', 'my_xml'/;


最愉快的事情是 SimpleXML 自动透明地返回对象
my_xml

对于此文档,因此您无需更改使您的方法的任何内容
get_parent_node//

快乐的:


// returns $grandchild's parent's parent
$grandchild->get_parent_node//->get_parent_node//;

二哥

赞同来自:

如果内存不会改变,请致电
xpath//

返回一个或多个
SimpleXMLElements

. 如果是这样,那么您可以使用类似的东西:


$div->xpath/ '..' /;
# or
$div->xpath/ 'parent::*' /;

要回复问题请先登录注册