2012-05-31 42 views
38
<!-- here is some comment -- 
          ^
          | 
        what can be here apart from '>'? 

XML dường như không thích '-' bên trong các nhận xét. Tôi đọc ở đâu đó rằng '-' chuyển đổi một số chế độ bên trong điều <! ... >, nhưng <!-- -- -- --> (thậm chí số -- s) dường như cũng không hợp lệ. Nếu nó là một số tính năng lịch sử, những gì là "chuyên nghiệp" một phần của nó? ("contra" một phần là không có khả năng có -- trong ý kiến).Nhận xét XML và "-"

Lý do làm phức tạp xử lý nhận xét bằng cách không chỉ làm '->' kết thúc nhận xét và cho phép '-' bên trong?

Trả lời

31

Từ các tiêu chuẩn tài liệu:

http://www.w3.org/TR/REC-xml/#sec-comments

[Định nghĩa: Ý kiến ​​có thể xuất hiện bất cứ nơi nào trong tài liệu bên ngoài đánh dấu khác; ngoài ra, chúng có thể xuất hiện trong loại khai báo tài liệu ở những nơi được phép theo ngữ pháp. Chúng không phải là một phần của dữ liệu ký tự của tài liệu ; một bộ xử lý XML có thể, nhưng không cần, làm cho nó có thể cho một ứng dụng truy xuất văn bản nhận xét. Đối với compatibility, chuỗi "-" (gạch nối kép) không được xuất hiện trong phạm vi ý kiến.] Tham chiếu thực thể tham số không được nhận dạng trong vòng nhận xét.

+0

Vì vậy, "chuyên nghiệp" tương thích với SGML. –

+1

Tôi muốn gọi đó là giao dịch kỹ thuật. – asawyer

16

-- không được phép tương thích với SGML. Từ On SGML and HTML:

không gian trắng không được phép giữa việc kê khai đánh dấu mở delimiter và nhận xét mở delimiter ('- '), nhưng là phép giữa những nhận xét delimiter gần ('(" <!') - ") và đánh dấu khai báo dấu phân cách gần (" > "). Lỗi thường gặp là bao gồm một chuỗi dấu gạch ngang ("---") trong một nhận xét. Tác giả nên tránh đặt hai hoặc nhiều dấu gạch ngang liền kề bên trong nhận xét.

Vì vậy, trong SGML <!> "tuyên bố đánh dấu" cởi mở và gần gũi và -- sẽ mở ra và đóng lại ý kiến.

19

Đó là một trong những quy tắc ngu ngốc đó là trong XML vì nó nằm trong SGML và mọi người không muốn phá vỡ tính tương thích. Tại sao nó trong SGML là dự đoán của bất kỳ ai: có thể vì nó đã lưu ba dòng mã trong trình phân tích gốc.

26

Có thể nó có thể hữu ích cho ai đó. Tôi đã có một vấn đề, mà tôi muốn nhận xét ra một tham số dòng lệnh trong XML mà bắt đầu với -: cách

<arg line="-v --line-break 0" /> 

rất tự nhiên bình thường như thế này

<!-- <arg line="-v --line-break 0" /> --> 

đã không làm việc, nhưng tôi phát hiện ra, rằng nếu - được thay thế bằng UTF-8 tương đương &#x002D; nó hoạt động và có thể được dung thứ bên trong các bình luận.

Vì vậy, trong trường hợp của tôi chuỗi

<arg line="-v &#x002d;&#x002d;line-break 0" /> 

được phân tách một cách chính xác và có thể là một phần của ý kiến.

Tất nhiên nó trông hơi xấu xí, nhưng nếu ai đó muốn giữ một chuỗi với - như bình luận trong XML của mình - tôi nghĩ rằng nó vẫn còn tốt hơn không có gì.

+14

Bạn cũng có thể sử dụng chuỗi thoát '- 'là phiên bản thoát ASCII và ngắn hơn một chút so với phiên bản unicode. – ricovox

+1

hoặc '-' (ascii/unicode trong hex) – Vojta

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