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 > 10">
. Esto funciona. Modifiqué el código para usar "<"
y eso funciona bien también.
He probado <xsl:if test="price > 10">
(tenga en cuenta el uso de >
en lugar de >
). 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
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.
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.
@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) ' –
@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
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! –
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 .
- 1. Java diciendo que el documento XML no está bien formado
- 2. Error Javascript no bien formado en for loop
- 3. Error de análisis XML: no está bien formado
- 4. primavera AOP pointcut no está bien formado
- 5. es el operador + menos eficiente que StringBuffer.append()
- 6. error "no bien formado" en Firefox al cargar el archivo JSON con XMLHttpRequest
- 7. Un valor numérico no bien formado encontrado
- 8. Análisis XML en Python: expaterror no bien formado
- 9. ob_flush() de PHP que causa el error
- 10. error: Error al analizar XML: no está bien formado (token inválido) ...?
- 11. ¿Comprueba el XML bien formado sin try/catch?
- 12. análisis XML error: no bien formado en Firefox, pero bueno en Chrome
- 13. ¿Por qué jQuery insiste en que mi texto plano no está "bien formado"?
- 14. tiene error con saxParser en android (no está bien formado (token inválido))
- 15. Guardar bien formado XML desde PowerShell
- 16. ¿Cómo determinar si XML está bien formado?
- 17. ¿El operador "If" de VB.NET causa el boxeo?
- 18. ¿Qué causa el error 'No se puede cancelar el UpdatePanel'?
- 19. (XML) El marcado en el documento que sigue al elemento raíz debe estar bien formado. Lugar de inicio: 6: 2
- 20. . HTACCESS Archivo que causa el error interno del servidor
- 21. es `* - p 'realmente legal (bien formado) en C++ 03
- 22. Estricto menos que el operador en el filtro de búsqueda LDAP?
- 23. Operador eliminar causando daños en el montón mientras el operador funciona bien
- 24. C#, MySQL, ADO.NET, delimitador que causa el error de sintaxis
- 25. ¿Cómo sobrecargar el operador menos unario en C++?
- 26. Signo de libra (#) en el nombre del archivo que causa el error
- 27. CGColorRef que causa el bloqueo
- 28. Usando el operador no igual en Cakephp
- 29. Cómo leer XML bien formado en Java, pero omita el esquema?
- 30. Operador STL less y error "operador no válido <
+1 - Aunque el último comentario es un poco engañoso: '' 'no está permitido * a menos que * sea parte de una entidad XML. – Tomalak
@Tomalak: Gracias, actualicé la respuesta. –
@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) –