2010-08-19 17 views
12

Estoy repasando el tutorial w3cschools XSLT, y estoy en esta página: xsl-if.

En esa página (en rojo) está el texto <xsl:if test="price &gt; 10">. Esto funciona. Modifiqué el código para usar "&lt;" y eso funciona bien también.

He probado <xsl:if test="price > 10"> (tenga en cuenta el uso de > en lugar de &gt;). Esto también funciona

Pero esto falla:<xsl:if test="price < 10">. El error es XML Parsing Error: not well-formed y apunta al símbolo < en la expresión.

Si el símbolo > funcionó bien, ¿por qué no se pudo utilizar el <? (Estoy usando Firefox)Menos que el operador causa el error "no bien formado" en xsl-if

Respuesta

12

Si el símbolo> funcionaba bien, ¿por qué utilizando el < fallan? (Estoy usando Firefox)

Debido a que el carácter "<" es uno de los pocos que son ilegales dentro de un valor de atributo (es el inicio del carácter etiqueta).

De los XML Specification

[10] AttValue ::= '"' ([^<&"] | Reference)* '"' 

Como puede verse claramente, el "<" y "&" caracteres no están permitidos en cualquier valor del atributo.

actualización: Como notado por @Tomalak, lo anterior será la siguiente:

Como se puede ver claramente, los caracteres "<" y "&" (a menos que éste forma parte de una referencia de entidad o carácter referencia) no están permitidos en ningún valor de atributo.

+1

+1 - Aunque el último comentario es un poco engañoso: '' 'no está permitido * a menos que * sea parte de una entidad XML. – Tomalak

+1

@Tomalak: Gracias, actualicé la respuesta. –

+2

@Tomalak: el carácter '&' no está permitido en el valor del atributo. No hay un carácter '&' en una referencia de entidad, porque una referencia de entidad es una entidad por sí misma. Y así se trata en la cara de normalización de atributos (por analizador de XML o alguna API) –

4

El corchete de "apertura" no codificado < generalmente no es válido en los valores de atributo XML as per the XML spec.

Mientras que el soporte de "cierre" > está permitido, usarlo es en realidad un estilo malo (en mi humilde opinión). Los valores de los atributos XML tienen que estar codificados en XML, punto.

+5

@Tomalak: Por qué usar '>' en lugar de '' > ''hace que el código sea más legible. Incluso normalmente invierto' x < y' a 'no (x> y -1) ' –

+2

@Dimitre: Es por eso que escribí" IMHO ". Soy bastante estricto en lo que respecta a la codificación de valores, y conscientemente evito los atajos y las lagunas, incluso si están documentados.' x < y' molesta mi flujo de lectura no es para nada. Sin embargo, ver 'no (x> y -1)' me haría detenerme y pensar, aunque sea por un segundo. ¿Por qué debería querer eso? Para mí, la legibilidad aumentada no compensa el tiempo que necesito pensar en la expresión. Para mí, no es económico. – Tomalak

+1

Creo que en el reverso de 'x < y' debería ser' y> x'. Y es más legible y más económico. Además, nunca entiendo por qué '<' podría romper el analizador y '>' ¡no! Ja! –

6

También puede ver la respuesta a esto en w3schools:

http://www.w3schools.com/xmL/xml_syntax.asp

referencias de entidad

Algunos caracteres tienen un significado especial en XML.

Si se coloca un personaje como "<" dentro de un elemento XML, se generará un error porque el analizador lo interpreta como el inicio de un nuevo elemento .

Cuestiones relacionadas