2009-01-16 7 views
81

Me doy cuenta de que no es elegante ni deseado, pero ¿está permitido (en XML bien formado) que un valor de atributo en un elemento XML abarque varias líneas?¿Se permiten saltos de línea en los valores de atributo XML?

p. Ej.

<some-xml-element value="this value goes over.... 
multiple lines!" /> 

Sí, me doy cuenta de que hay mejores formas de escribir eso. Me gustaría escribir personalmente se siente:

<some-xml-element> 
<value>this value goes over... 
multiple lines!</value> 
</some-xml-element> 

o:

<some-xml-element value="this value goes over....&#13;&#10;" /> 

Pero nosotros tenemos nuestro propio analizador XML y me gustaría saber si se permite que el primer ejemplo en XML bien formado.

+0

El .NET XDocument analizador acepta esto como se esperaba, pero el valor del atributo se volvió con un espacio, no un salto de línea, ya que sería en un texto como segundo ejemplo. (Su pregunta no es específica de .NET, pero mis datos de muestra son. No sé si esto es parte del estándar general o una función .NET). –

+1

Vea también http://stackoverflow.com/q/2004386/55452 –

+0

hizo un ejemplo a una pregunta similar que conserva líneas nuevas: http://stackoverflow.com/a/29782321/611007 – n611x007

Respuesta

93

http://www.w3.org/TR/REC-xml/#NT-AttValue

parece decir todo excepto <, &, y el delimitador (' o ") están bien. Así que nueva línea debería ser, también.

+6

Un ejemplo cuando las nuevas líneas son una buena idea dentro de un atributo es para el atributo xsi: schemaLocation en la configuración de Spring, que puede contener varias URL separadas por espacios y, por lo tanto, ser mucho más largas que el ancho de la pantalla. – stivlo

+2

es válido; sin embargo, el analizador los normalizará en el espacio, [como dice Jan Cetkovsky] (http://stackoverflow.com/a/8188290/611007). – n611x007

+0

Bueno ...Utilizo varias líneas para declaraciones de prueba largas y/o largas en documentos XSLT. – Nullius

2

Sí, el primer ejemplo es válido.

3

.NET solamente: Si no está seguro de si la cadena de destino es un atributo xml válido (y proporcione el valor de este atributo mediante el código), siempre puede usar la función SecurityElement.Escape para escapar caracteres no válidos.

De acuerdo con la descripción de esta función, los únicos caracteres no válidos son:

<, >, &, ', "

Y esto significa (como escribieron mis predecesores), que la nueva línea debe ser DE ACUERDO.

45

Está permitido, pero según la recomendación W3C, su analizador XML debe normalizar todos los espacios en blanco al espacio (0x20), por lo que la salida de los ejemplos será diferente (debe tener una nueva línea en la salida para "& # 13 ; & # 10; ", pero solo espacio en el primer caso).

http://www.w3.org/TR/1998/REC-xml-19980210#AVNormalize

Cuestiones relacionadas