Accédez à l'élément parent avec PHP SimpleXML?

Je passe par l'ensemble d'objets SimpleXML Et je ne peux pas comprendre comment accéder au noeud parent de chaque objet. C'est ce que je veux:


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


Il semble qu'il y ait un moyen assez simple de le faire.
Invité:

Christine

Confirmation de:

Vous pouvez exécuter une simple demande. XPath, pour l'obtenir:


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


Et depuis que ça Simplexml, Et il n'a que des nœuds d'éléments et d'attributs, et le nœud parent ne peut être qu'un élément et jamais attribuer, vous pouvez utiliser la syntaxe abrégée:


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


/de l'autre côté:

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

Giselle

Confirmation de:

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


Notez que vous pouvez développer SimpleXML, Pour le faire comme ça. Par exemple:


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


Et maintenant tout ce que vous devez faire est de changer le code que vous utilisez pour créer votre SimpleXMLElement D'abord:


$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'/;


La chose la plus agréable est que SimpleXML retourne automatiquement et transparence des objets
my_xml

Pour ce document, vous n'avez donc pas besoin de changer de chose qui fait votre méthode
get_parent_node//

chaîne:


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

Catherine

Confirmation de:

Si la mémoire ne change pas, appelez
xpath//

Retourne un ou plusieurs
SimpleXMLElements

. Si oui, alors vous pouvez utiliser quelque chose comme:


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

Pour répondre aux questions, connectez-vous ou registre