XML özellik değerlerinde satır kesmelerine izin verilir mi?


92

Bunun zarif veya arzu edilmediğinin farkındayım, ancak bir XML öğesindeki bir öznitelik değerinin birden çok satırı kapsamasına izin veriliyor mu (iyi biçimlendirilmiş XML'de)?

Örneğin

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

Evet, bunu yazmanın daha iyi yolları olduğunun farkındayım. Ben şahsen şöyle yazardım:

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

veya:

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

Ancak kendi XML ayrıştırıcımız var ve iyi biçimlendirilmiş XML'de ilk örneğe izin verilip verilmediğini öğrenmek istiyorum.


1
.NET XDocument çözümleyicisi bunu beklendiği gibi kabul eder, ancak öznitelik değeri bir boşlukla döndürülür, ikinci örnekte olduğu gibi bir metin <value> 'de olacağı gibi bir satır beslemesi değil. (Sorunuz .NET'e özgü değil, ancak örnek verilerim. Bunun genel standardın bir parçası mı yoksa bir .NET özelliği mi olduğunu bilmiyorum.)
Mark Hurd


yeni satırları koruyan benzer bir soruya örnek yaptı: stackoverflow.com/a/29782321/611007
n611x007

Yanıtlar:


102

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

Dışında her şeyi söylemek görünüyor <, &ve senin sınırlayıcı ( 'veya ") ok. Yani satırsonu da olmalı.


6
Yeni satırların bir öznitelik içinde iyi bir fikir olduğu bir örnek, Bahar yapılandırmasındaki xsi: schemaLocation özniteliğidir; bu, boşluklarla ayrılmış birkaç URL içerebilir ve bu nedenle ekran genişliğinden çok daha uzun olabilir.
stivlo

3
bu geçerlidir ancak Jan Cetkovsky'nin dediği gibi ayrıştırıcı bunları uzaya normalleştirecektir .
n611x007

Şey ... XSLT belgelerinde uzun if / when test ifadeleri için birden çok satır kullanıyorum.
Nullius

51

Buna izin verilir, ancak W3C önerisine göre XML ayrıştırıcınız tüm boşluk karakterlerini boşluğa (0x20) göre normalleştirmelidir - bu nedenle örneklerinizin çıktısı farklı olacaktır ("& # 13; & # 10 için çıktıda yeni satırınız olmalıdır. ; ", ancak yalnızca ilk durumda boşluk).

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


3

.NET only: emin hedef dize geçerli xml özniteliği (ve kodu aracılığıyla bu niteliğin değerini sağlamak) ise iseniz, her zaman kullanabilirsiniz SecurityElement.Escape geçersiz karakterler kaçmayı işlevini.

Bu işlevin açıklamasına göre, tek geçersiz karakterler şunlardır:

<, >, &, ',"

Ve bu (seleflerimin yazdığı gibi), yeni satırın tamam olması gerektiği anlamına gelir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.