una tesis teorico sistema proyecto marco implementacion escolar control bibliotecario biblioteca xml xslt

xml - tesis - XSLT: ¿Cómo representar O en un atributo de "coincidencia"?



tesis implementacion de una biblioteca virtual pdf (5)

Quiero realizar una serie de operaciones en elementos que coincidan con el nombre "A" o "B". Estoy pensando en algo como esto a continuación, pero no funciona.

<xsl:template match= " ''A'' or ''B''" > <!-- whatever I want to do here --> </xsl:template>

No se pudo encontrar la referencia de idioma XSLT apropiada para ello. ¡Por favor ayuda! ¡¡Gracias!!


<xsl:template match= " ''A'' or ''B''" >

Hay algunos problemas con este patrón de coincidencia :

  1. Una plantilla coincide con los nodos , no con las cadenas. Por lo tanto, los nombres de los elementos que se emparejarán no se deben especificar como cadenas entre comillas.

  2. El operador XPath "o" actúa sobre dos valores booleanos, no sobre nodos. Lo que es necesario aquí es otro operador XPath: el operador sindical "|" .

Teniendo en cuenta lo anterior, uno especificará correctamente la regla de la plantilla como:

<xsl:template match= "A | B" > <!-- whatever I want to do here --> </xsl:template>


Creo que es más conveniente usar este XPath

/red/(yellow | orange)/blue/green/gold

más bien que

/red/*[name() = ''yellow'' or name()=''orange'']/blue/green/gold


Generalmente A | B A | B es la forma correcta de hacer esto. Pero el personaje de la tubería es básicamente una unión de dos expresiones XPath completas. Puede ser molesto usarlo en un caso como este:

/red/yellow/blue/green/gold | red/orange/blue/green/gold

ya que estás repitiendo la totalidad de la expresión a excepción de que una pequeña parte de eso está cambiando.

En casos como este, a menudo tiene sentido usar un predicado y la función name() lugar:

/red/*[name() = ''yellow'' or name()=''orange'']/blue/green/gold

Esta técnica le da acceso a un rango mucho más amplio de operaciones lógicas. También es (concebiblemente) más rápido, ya que el navegador XPath solo tiene que atravesar los nodos que está probando una vez.