2013-11-14 26 views
13

Tôi đang sử dụng các tệp XLST để chuyển đổi XML thành XML.Không gian XML không phá vỡ

Đại diện không gian hợp lệ là gì?

<xsl:text> </xsl:text> 
<xsl:text>&nbsp;</xsl:text> 
<xsl:text>&#160;</xsl:text> 
+2

Đầu tiên là một không gian bình thường, '  'không phải là mã hóa hợp lệ và mã hóa hợp lệ là'   ' – freefaller

Trả lời

12

XML không có bất kỳ thực thể có tên bên cạnh &lt;, &gt;, &quot;, &apos;&amp;.

Tất cả các ký tự khác có thể được thể hiện đúng nguyên văn, với điều kiện bạn khai báo đúng mã hóa trong khai báo XML (ví dụ: <?xml version="1.0" encoding="..." ?>). Khai báo UTF-8 là tùy chọn, vì đây là mặc định.

Nói cách khác: Không có nhu cầu đặc biệt thoát khỏi bất kỳ ký tự ở bất cứ đâu trừ rời khỏi nó unescaped sẽ phá vỡ quy tắc cú pháp XML (như < hoặc & sẽ).

Bạn hoàn toàn có thể thoát khỏi bất kỳ nhân vật nào bạn muốn.

Những phần trình bày là tương đương như xa như các tài liệu kết quả là có liên quan:

<foo>&#x54;&#x65;&#x73;&#x74;&#xa0;&#x54;&#x65;&#x73;&#x74;</foo> 

<foo>&#84;&#101;&#115;&#116;&#160;&#84;&#101;&#115;&#116;</foo> 

<foo>Test&#160;Test</foo> 

<foo>Test Test</foo><!-- given that the " " really is char code 160 --> 

Lưu ý rằng bạn có thể tuyên bố cho khách hàng là các tổ chức (như nbsp) sử dụng một DOCTYPE.

<!DOCTYPE xsl:stylesheet [ 
    <!ENTITY nbsp "&#160;"> 
]> 

Nhưng với thực tế là XML chấp nhận bất kỳ ký tự nào hầu như không cần thiết. Đặc biệt không phải khi bạn tạo tài liệu bằng cách sử dụng một công cụ thích hợp, như một API DOM.

+0

Hai số sau có tương đương không? Một không gian không giống như một không gian phá vỡ ... ít nhất là làm thế nào tôi hiểu nó – freefaller

+2

Đó là một trục trặc trong bình thường hóa của SO. Tôi chắc chắn sử dụng một nhân vật NBSP nhưng nó âm thầm được thay thế bằng một không gian bình thường. Dường như không thể lưu trữ một NBSP thực tế trong một câu trả lời. – Tomalak

4

Vì nó liên quan đến câu hỏi, hãy thêm tất cả các thực thể gây ra lỗi phân tích cú pháp cho DOCTYPE của biểu định kiểu * .xls của bạn.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE xsl:stylesheet [ 
    <!ENTITY nbsp "&#160;"> 
]> 
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

Bây giờ bạn có thể sử dụng &nbsp; như bình thường.

Các vấn đề liên quan