xsl transformar programacion generar freeformater ejemplos ejemplo codigo archivo xml xslt xpath xml-attribute

xml - transformar - xsl apply templates



XSLT-¿Cómo seleccionar el atributo XML por atributo? (5)

Hay dos problemas con su xpath: primero debe quitar el selector de elementos secundarios de después de los Data como phihag mencionado. También olvidó incluir root en su xpath. Esto es lo que quieres hacer:

select="/root/DataSet/Data[@Value1=''2'']/@Value2"

esta es la estructura de mi fuente xml:

<root> <DataSet Value="A"> <Data Value1="1" Value2="anythingA1" /> <Data Value1="2" Value2="anythingA2" /> <Data Value1="3" Value2="anythingA3" /> <Data Value1="4" Value2="anythingA4" /> <Data Value1="5" Value2="anythingA5" /> </DataSet> </root>

de la que me gustaría crear algunas variables, por ejemplo, de todos con Value1 = "2" y todo con Value1 = "5", debería dar como resultado myVar1 con anythingA2 y myVar2 con anythingA5

Mi aproximación se ve así

<xsl:variable name="myVarA" select="/DataSet/Data/[@Value1=''2'']/@Value2" />

pero, por supuesto, no funciona, ya que Value2 no es hijo de Value1.

gracias por cualquier pista de antemano!


Lo haría creando una variable que apunta a los nodos que tienen el valor apropiado en Value1 y luego refiriéndome a t

<xsl:variable name="myVarANode" select="root//DataSet/Data[@Value1=''2'']" /> <xsl:value-of select="$myVarANode/@Value2"/>

Las respuestas de todos los demás también son correctas, más bien, de hecho, ya que no noté la barra extra en tu XPATH que ensuciaría las cosas. Aún así, esto también funcionará, y podría funcionar para diferentes cosas, así que mantenga este método en su caja de herramientas.


Nota: el uso de // al comienzo de xpath es un poco intensivo en la CPU: buscará en cada nodo una coincidencia. Usar una ruta más específica, como / root / DataSet creará una consulta más rápida.


Prueba esto

xsl:variable name="myVarA" select="//DataSet/Data[@Value1=''2'']/@Value2" />

El ''//'' buscará DataSet en cualquier profundidad


Simplemente elimine la barra después de Data y anteceda la raíz:

<xsl:variable name="myVarA" select="/root/DataSet/Data[@Value1=''2'']/@Value2"/>