regulares online herramienta expresiones xml xpath

xml - online - XPath para obtener todos los nodos secundarios(elementos, comentarios y texto) sin padre



xpath expresiones regulares (2)

Necesito un XPath para buscar todos los ChildNodes (incluido el elemento de texto, el elemento de comentario y los elementos secundarios) sin elementos principales. Alguna ayuda

Ejemplo de muestra:

<DOC> <PRESENTEDIN> <X> First Text Node #1 <y> Y can Have Child Nodes # <child> deep to it </child> </y> Second Text Node #2 <z/> </X> <EVTS> <evt/> <evt> <mtg_descr> SAE 2006 World Congress &amp; Exhibition </mtg_descr> <sess_descr> Advanced Hybrid Vehicle Powertrains (Part 1 of 5) </sess_descr> <loc> Detroit,MI,United States </loc> <sess_prod_grp_cd> TSESS </sess_prod_grp_cd> <sess_evt_name> P13 </sess_evt_name> <sess_gen_num> 138352 </sess_gen_num> <mtg_start_dt> 04/03/2006 </mtg_start_dt> <mtg_end_dt> 04/06/2006 </mtg_end_dt> <desig> CONGRESS-2006 </desig> </evt> </EVTS> <EVTTYPE>PAPER</EVTTYPE> <SUPERTECH> <![CDATA[C8585]]> </SUPERTECH> </PRESENTEDIN>

XPATH TRIED

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

RENDIMIENTO ESPERADO

First Text Node #1 <y> Y can Have Child Nodes # <child> deep to it </child> </y> Second Text Node #2 <z/>

NO QUIERO

<X> First Text Node #1 <y> Y can Have Child Nodes # <child> deep to it </child> </y> Second Text Node #2 <z/> </X>


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

child::* selecciona todos los elementos child::* del nodo de contexto

child::text() selecciona todos los elementos de nodo de texto del nodo contextual

child::node() selecciona todos los elementos child::node() de contexto, cualquiera que sea su tipo de nodo

Así que supongo que tu respuesta es:

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

Y si quiere apilar una matriz de todos los nodos anidados:

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


Usa esta expresión XPath :

/*/*/X/node()

Esto selecciona cualquier nodo (elemento, nodo de texto, comentario o instrucción de procesamiento) que sea hijo de cualquier elemento X que sea un elemento secundario del elemento superior del documento XML.

Para verificar qué se selecciona , aquí está esta transformación XSLT que produce exactamente los nodos seleccionados:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="/"> <xsl:copy-of select="/*/*/X/node()"/> </xsl:template> </xsl:stylesheet>

y produce exactamente el resultado deseado y correcto:

First Text Node #1 <y> Y can Have Child Nodes # <child> deep to it </child> </y> Second Text Node #2 <z />

Explicación

  1. Como se define en la especificación W3 XPath 1.0 , " child::node() selecciona todos los elementos child::node() contextual, cualquiera que sea su tipo de nodo". Esto significa que cualquier nodo de nodo de elemento, nodo de texto, nodo de comentario e instrucción de procesamiento se seleccionan mediante esta prueba de nodo.

  2. node() es una abreviatura de child::node() (porque child:: es el eje primario y se usa cuando no se especifica explícitamente un eje).