As quebras de linha nos valores de atributos XML são permitidas?


91

Percebo que não é elegante ou desejado, mas é permitido (em XML bem formado) que um valor de atributo em um elemento XML se estenda por várias linhas?

por exemplo

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

Sim, eu sei que há maneiras melhores de escrever isso. Eu pessoalmente escreveria assim:

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

ou:

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

Mas nós temos nosso próprio analisador XML e gostaria de saber se o primeiro exemplo é permitido em XML bem formado.


1
O analisador .NET XDocument aceita isso conforme o esperado, mas o valor do atributo é retornado com um espaço, não uma alimentação de linha como seria em um texto <valor> como seu segundo exemplo. (Sua pergunta não é específica do .NET, mas meus dados de amostra são. Não sei se isso faz parte do padrão geral ou um recurso .NET.)
— Mark Hurd


fez um exemplo para uma pergunta semelhante que preserva novas linhas: stackoverflow.com/a/29782321/611007
— n611x007

Respostas:


101

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

Parece dizer tudo <, exceto , &e seu delimitador ( 'ou ") está OK. Portanto, nova linha também deve ser.


6
Um exemplo de quando novas linhas são uma boa ideia dentro de um atributo é para o atributo xsi: schemaLocation na configuração do Spring, que pode conter vários URLs separados por espaços e, portanto, ser muito maior do que a largura da tela.
— stivlo

3
é válido, entretanto, o analisador irá normalizá-los para o espaço, como diz Jan Cetkovsky .
— n611x007,

Bem ... eu uso várias linhas para declarações de teste if / when longas em documentos XSLT.
— Nullius

51

É permitido, no entanto, de acordo com a recomendação do W3C, seu analisador XML deve normalizar todos os caracteres de espaço em branco para espaço (0x20) - então a saída de seus exemplos será diferente (você deve ter uma nova linha na saída para "& # 13; & # 10 ; ", mas apenas espaço no primeiro caso).

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


3

Somente .NET: Se você não tiver certeza se a string de destino é um atributo xml válido (e fornecer o valor desse atributo por meio do código), você sempre pode usar a função SecurityElement.Escape para escapar de caracteres inválidos.

De acordo com a descrição desta função, os únicos caracteres inválidos são:

<, >, &, ',"

E isso significa (como escreveram meus predecessores), essa nova linha deve estar OK.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.