Sono consentite interruzioni di riga nei valori degli attributi XML?


91

Mi rendo conto che non è elegante o desiderato, ma è consentito (in XML ben formato) che un valore di attributo in un elemento XML si estenda su più righe?

per esempio

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

Sì, mi rendo conto che ci sono modi migliori per scrivere questo. Lo scriverei personalmente come:

<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;" />

Ma abbiamo il nostro analizzatore XML e vorrei sapere se il primo esempio è consentito in XML ben formato.


1
Il parser .NET XDocument lo accetta come previsto, ma il valore dell'attributo viene restituito con uno spazio, non un avanzamento riga come sarebbe in un testo <valore> come secondo esempio. (La tua domanda non è specifica per .NET, ma i miei dati di esempio lo sono. Non so se questo fa parte dello standard generale o di una funzionalità .NET.)
Mark Hurd


fatto un esempio di una domanda simile che conserva newlines: stackoverflow.com/a/29782321/611007
n611x007

Risposte:


101

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

Sembra dire tutto tranne <, &e il delimitatore ( 'o ") sono OK. Quindi dovrebbe esserlo anche la nuova riga.


6
Un esempio in cui le nuove righe sono una buona idea all'interno di un attributo è per l'attributo xsi: schemaLocation nella configurazione Spring, che può contenere diversi URL separati da spazi e quindi essere molto più lunghi della larghezza dello schermo.
stivlo

3
è valido tuttavia il parser li normalizzerà nello spazio, come dice Jan Cetkovsky .
n611x007

Bene ... Io uso più righe per lunghe istruzioni di test if / when nei documenti XSLT.
Nullius

51

È consentito, tuttavia, in base alle raccomandazioni del W3C, il tuo parser XML dovrebbe normalizzare tutti i caratteri di spazi bianchi in spazi (0x20), quindi l'output dei tuoi esempi sarà diverso (dovresti avere una nuova riga sull'output per "& # 13; & # 10 ; ", ma solo spazio nel primo caso).

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


3

Solo .NET: se non sei sicuro che la stringa di destinazione sia un attributo xml valido (e fornisci il valore di questo attributo tramite codice), puoi sempre utilizzare la funzione SecurityElement.Escape per eseguire l'escape di caratteri non validi.

Secondo la descrizione di questa funzione, gli unici caratteri non validi sono:

<, >, &, ',"

E questo significa (come hanno scritto i miei predecessori), quella nuova riga dovrebbe essere OK.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.