Una forma de hacerlo sería:
<xsl:variable name="apos" select='"'"'/>
<!-- ... later ... -->
<xsl:for-each select="country[nation=concat('India', $apos, 's')]">
El problema aquí es doble:
- XSLT no define ninguna forma de escape de caracteres en cadenas. Entonces
'India\'s'
no es una opción.
- Debe pasar por dos capas distintas de evaluación.
Estos son:
- XML bien formado: El documento XML XSLT su programa consiste debe estar bien formado. No puedes violar las reglas XML.
- Análisis de expresión XSLT: La cadena de valor de atributo resultante (después de que se realiza el análisis XML DOM) debe tener sentido para el motor XSLT.
Constructos gusta:
<xsl:for-each select="country[nation='India's']">
<xsl:for-each select="country[nation='India's']">
pasar la capa de XML pero violan la capa XSLT, porque en ambos casos el valor del atributo efectiva (tal como se almacena en el DOM) es country[nation='India's']
, lo que claramente es una sintaxis XPath error.
constructos gustan:
<xsl:for-each select="country[nation=concat('India', "'", 's')]">
<xsl:for-each select="country[nation=concat("India", "'", "s")]">
violan claramente la capa XML. Pero no violarían la capa XSLT (!), Ya que su valor real (si el documento XSLT podría analizarse en primer lugar) saldría como country[nation=concat('India', "'", 's')]
, lo cual es perfectamente legal como una expresión XPath.
Por lo tanto, debe encontrar la manera de atravesar tanto la capa 1 como la capa 2. Una forma es la forma variable que se muestra arriba. Otra forma es:
<xsl:for-each select="country[nation=concat('India', "'", 's')]">
que aparecería a XSLT como country[nation=concat('India', "'", 's')]
.
Personalmente, me resulta más fácil trabajar con la "forma variable".
@Nanda: Ya ha hecho muchas preguntas y recibió respuestas para todas ellas, pero no votó ni aceptó ninguna respuesta. Verifique si puede aceptar algunas de las respuestas que ha recibido hasta ahora. Se paga a las personas que han invertido su tiempo en sus problemas. – Tomalak
@Nanda: también ayuda a los futuros usuarios que buscan un problema similar y se encuentran con esta pregunta: les dice que una respuesta en particular funcionó para usted. –