XPath pour obtenir tous les nœuds enfants (éléments, commentaires et texte) sans parent

J’ai besoin d’un XPath pour récupérer tous les ChildNodes (y compris les éléments de texte, les éléments de commentaire et les éléments enfants) sans élément parent. De l’aide

Exemple d’exemple:

   First Text Node #1  Y can Have Child Nodes #  deep to it   Second Text Node #2       SAE 2006 World Congress & Exhibition   Advanced Hybrid Vehicle Powertrains (Part 1 of 5)   Detroit,MI,United States   TSESS   P13   138352   04/03/2006   04/06/2006   CONGRESS-2006    PAPER     

XPATH ESSAYÉ

  1. $doc/PRESENTEDIN/X 2. $doc/PRESENTEDIN/X/descendant::* 2. $doc/PRESENTEDIN/X/self::* 

PRODUCTION ATTENDUE

  First Text Node #1  Y can Have Child Nodes #  deep to it   Second Text Node #2  

Je ne veux pas

  First Text Node #1  Y can Have Child Nodes #  deep to it   Second Text Node #2   

De la documentation de XPath ( http://www.w3.org/TR/xpath/#location-paths ):

child::* sélectionne tous les enfants de l’élément du noeud de contexte

child::text() sélectionne tous les enfants du noeud de texte du noeud de contexte

child::node() sélectionne tous les enfants du noeud de contexte, quel que soit leur type de noeud

Donc, je suppose que votre réponse est la suivante:

 $doc/PRESENTEDIN/X/child::node() 

Et si vous voulez un tableau aplati de tous les nœuds nesteds:

 $doc/PRESENTEDIN/X/descendant::node() 

Utilisez cette expression XPath :

 /*/*/X/node() 

Cela sélectionne tout nœud (élément, nœud de texte, commentaire ou instruction de traitement) qui est un enfant d’un élément X qui est un grand-enfant de l’élément supérieur du document XML.

Pour vérifier ce qui est sélectionné , voici cette transformation XSLT qui génère exactement les nœuds sélectionnés:

       

et il produit exactement le résultat recherché:

  First Text Node #1  Y can Have Child Nodes #  deep to it   Second Text Node #2  

Explication :

  1. Comme défini dans le W3 XPath 1.0 Spec, ” child::node() sélectionne tous les enfants du noeud de contexte, quel que soit leur type de noeud.” Cela signifie que tous les enfants de nœud d’élément, de nœud de texte, de nœud de commentaire et d’instruction de traitement sont sélectionnés par ce test de nœud.

  2. node() est une abréviation de child::node() (car child:: est l’axe principal et est utilisé quand aucun axe n’est explicitement spécifié).