Có được phép ngắt dòng trong các giá trị thuộc tính XML không?


91

Tôi nhận ra rằng nó không trang nhã hoặc không mong muốn, nhưng nó có được phép (trong XML định dạng tốt) cho một giá trị thuộc tính trong một phần tử XML kéo dài nhiều dòng không?

ví dụ

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

Vâng, tôi nhận ra có nhiều cách tốt hơn để viết điều đó. Cá nhân tôi sẽ viết nó như:

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

hoặc là:

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

Nhưng chúng tôi có trình phân tích cú pháp XML của riêng mình và tôi muốn biết liệu ví dụ đầu tiên có được phép sử dụng trong XML đúng định dạng hay không.


1
Trình phân tích cú pháp .NET XDocument chấp nhận điều này như mong đợi, nhưng giá trị thuộc tính được trả về với một khoảng trắng, không phải nguồn cấp dữ liệu dòng như trong một văn bản <value> như ví dụ thứ hai của bạn. (Câu hỏi của bạn không dành riêng cho .NET, nhưng dữ liệu mẫu của tôi thì có. Tôi không biết đây là một phần của tiêu chuẩn chung hay một tính năng .NET.)
Mark Hurd


làm một ví dụ cho một câu hỏi tương tự mà bảo tồn dòng mới: stackoverflow.com/a/29782321/611007
n611x007

Câu trả lời:


101

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

Có vẻ như nói mọi thứ ngoại trừ <, &và dấu phân cách ( 'hoặc ") của bạn là OK. Vì vậy, dòng mới cũng nên.


6
Một ví dụ khi các dòng mới là một ý tưởng hay bên trong một thuộc tính là đối với thuộc tính xsi: schemaLocation trong cấu hình Spring, có thể chứa một số URL được phân tách bằng dấu cách và do đó dài hơn nhiều so với chiều rộng màn hình.
stivlo,

3
nó hợp lệ tuy nhiên trình phân tích cú pháp sẽ chuẩn hóa chúng thành không gian, như Jan Cetkovsky nói .
n611x007

Chà ... Tôi sử dụng nhiều dòng cho các câu lệnh kiểm tra if / when dài trong tài liệu XSLT.
Nullius

51

Nó được phép, tuy nhiên theo khuyến nghị của W3C trình phân tích cú pháp XML của bạn nên chuẩn hóa tất cả các ký tự khoảng trắng thành khoảng trắng (0x20) - vì vậy đầu ra của các ví dụ của bạn sẽ khác nhau (bạn nên có dòng mới trên đầu ra cho "& # 13; & # 10 ; ", nhưng chỉ là khoảng trắng trong trường hợp đầu tiên).

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


3

Chỉ .NET: Nếu bạn không chắc liệu chuỗi đích có phải là thuộc tính xml hợp lệ hay không (và cung cấp giá trị của thuộc tính này qua mã), bạn luôn có thể sử dụng hàm SecurityElement.Escape để thoát các ký tự không hợp lệ.

Theo mô tả của hàm này, các ký tự không hợp lệ duy nhất là:

<, >, &, ',"

Và điều này có nghĩa là (như những người tiền nhiệm của tôi đã viết), dòng mới đó sẽ ổn.


2

Có ví dụ đầu tiên là một ví dụ hợp lệ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.