Access an element's parent with PHP's SimpleXML?
You could run a simple XPath query to get it:
$parent_div = $div->xpath("parent::*");
And as this is Simplexml and it only has element and attribute nodes and a parent node can only be an element and never an attribute, the abbreviated syntax can be used:
$parent_div = $div->xpath("..");
(via: Common Xpath Cheats - SimpleXML Type Cheatsheet (Feb 2013; by hakre) )
$div->get_parent_node(); // Sadly, there's no such function.
Note that you can extend SimpleXML to make it so. For example:
class my_xml extends SimpleXMLElement{ public function get_parent_node() { return current($this->xpath('parent::*')); }}
And now all you have to do is modify the code you use to create your SimpleXMLElement in the first place:
$foo = new SimpleXMLElement('<foo/>');// becomes$foo = new my_xml('<foo/>');$foo = simplexml_load_string('<foo/>');// becomes$foo = simplexml_load_string('<foo/>', 'my_xml');$foo = simplexml_load_file('foo.xml');// becomes$foo = simplexml_load_file('foo.xml', 'my_xml');
The best part is that SimpleXML will automatically and transparently return my_xml
objects for this document, so you don't have to change anything else, which makes your get_parent_node()
method chainable:
// returns $grandchild's parent's parent$grandchild->get_parent_node()->get_parent_node();