Разрешены ли разрывы строк в значениях атрибутов XML?

Я понимаю, что это не изящно и нежелательно, но разрешено ли (в правильно сформированном XML), чтобы значение атрибута в элементе XML занимало несколько строк?

e.g.

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

Да, я понимаю, что есть способы лучше написать это. Я бы лично написал это так:

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

or:

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

Но у нас есть собственный XML-синтаксический анализатор, и я хотел бы знать, разрешен ли первый пример в правильно сформированном XML.


person CodeAndCats    schedule 16.01.2009    source источник
comment
Парсер .NET XDocument принимает это, как ожидалось, но значение атрибута возвращается с пробелом, а не с переводом строки, как это было бы в тексте ‹value›, как во втором примере. (Ваш вопрос не относится к .NET, но мои образцы данных относятся к нему. Я не знаю, является ли это частью общего стандарта или функцией .NET.)   -  person Mark Hurd    schedule 02.03.2011
comment
См. Также stackoverflow.com/q/2004386/55452   -  person David J. Liszewski    schedule 03.01.2013
comment
привел пример к аналогичному вопросу, который сохраняет символы новой строки: stackoverflow.com/a/29782321/611007   -  person n611x007    schedule 22.04.2015
comment
связанные: stackoverflow.com/questions/260436 связанные: stackoverflow.com/questions/2004386 - связанные: stackoverflow.com/questions/1289524   -  person n611x007    schedule 22.04.2015


Ответы (4)


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

Кажется, все, кроме <, & и вашего разделителя (' или ") в порядке. Так должна быть и новая строка.

person derobert    schedule 16.01.2009
comment
Одним из примеров, когда новые строки являются хорошей идеей внутри атрибута, является атрибут xsi: schemaLocation в конфигурации Spring, который может содержать несколько URL-адресов, разделенных пробелами, и, следовательно, быть намного длиннее, чем ширина экрана. - person stivlo; 13.07.2011
comment
он действителен, однако парсер нормализует их по пространству, как говорит Ян Цетковски. - person n611x007; 22.04.2015
comment
Что ж ... Я использую несколько строк для длинных тестовых операторов if / when в документах XSLT. - person Nullius; 17.03.2016

Это разрешено, однако в соответствии с рекомендацией W3C ваш анализатор XML должен нормализовать все пробельные символы к пробелу (0x20), поэтому вывод ваших примеров будет отличаться (у вас должна быть новая строка на выходе для "", но только пробел в первый случай).

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

person Jan Cetkovsky    schedule 18.11.2011

Только .NET: если вы не уверены, является ли целевая строка допустимым атрибутом xml (и укажите значение этого атрибута с помощью кода), вы всегда можете использовать SecurityElement.Escape для экранирования недопустимых символов.

Согласно описанию этой функции единственными недопустимыми символами являются:

<, >, &, ', "

А это означает (как писали мои предшественники), что новая строка должна быть в порядке.

person Łukasz Wiatrak    schedule 15.11.2011

Да, первый пример верен.

person Reji    schedule 16.01.2009