Thoát ký tự dấu ngoặc kép trong XML


101

Có một ký tự thoát cho một dấu ngoặc kép trong xml không? Tôi muốn viết một thẻ như:

<parameter name="Quote = " ">

nhưng nếu tôi đặt ", thì điều đó có nghĩa là chuỗi đã kết thúc. Tôi cần một cái gì đó như thế này (c ++):

printf("Quote = \" ");

Có một ký tự để viết trước dấu ngoặc kép để thoát khỏi nó?





Trả lời ngắn gọn: &quot; Phần còn lại của câu chuyện ...
kjhughes

Câu trả lời:



118

Dưới đây là các ký tự phổ biến cần được thoát trong XML, bắt đầu bằng dấu ngoặc kép:

  1. dấu ngoặc kép ( ") được thoát thành&quot;
  2. dấu và ( &) được thoát khỏi&amp;
  3. dấu ngoặc kép ( ') được thoát thành&apos;
  4. ít hơn ( <) được thoát đến&lt;
  5. lớn hơn ( >) được thoát đến&gt;

3
Sai; & apos; không phải là một ký tự XML hợp lệ. Đây là một ký tự HTML hợp lệ - là SGML và một SUPERset của XML.
Stefan Steiger

Mặc dù đó là một điểm hợp lệ, hầu hết các trình phân tích cú pháp XML hiện đại mà tôi đã làm việc đều chấp nhận nó là ký tự hợp lệ.
Dariusz G. Jagielski

& quot; không được Android diễn giải chính xác khi chuỗi được bao quanh bởi dấu ngoặc kép. Trong trường hợp này, câu trả lời E-max là câu trả lời duy nhất hoạt động.
Softlion

@StefanSteiger nó có trong danh sách này
OrangeDog

@Dariusz G. Jagielski: Mặc dù tôi không có gì chống lại trình phân tích cú pháp XML hiện đại - nếu bạn làm việc với XML trong cơ sở dữ liệu (ví dụ: ms / pg), bạn sẽ thấy rằng không phải mọi phần mềm đều sử dụng trình phân tích cú pháp xml hiện đại. Đặc biệt là khi đó là một phần mềm phức tạp đã cũ hàng thập kỷ. Điều đó nói rằng, nếu mọi người đều sử dụng trình phân tích cú pháp xml hiện đại, đó sẽ là một điều tốt. Tuy nhiên, nếu mã đó được tích hợp sâu trong phần mềm phức tạp cũ hơn, thì rất khó thay thế nó (trong khi vẫn giữ được 100% tính tương thích ngược). Có thể nói nhược điểm của C hoặc việc không sử dụng phương pháp tiêm phụ thuộc.
Stefan Steiger

27

Những người khác đã trả lời về cách xử lý cụ thể khi bỏ trốn trong trường hợp này.

Một câu trả lời rộng hơn là đừng cố gắng tự mình làm. Sử dụng API XML - có rất nhiều thứ có sẵn cho mọi nền tảng lập trình hiện đại đang tồn tại.

Các API XML sẽ tự động xử lý những thứ như thế này cho bạn, giúp bạn khó làm sai hơn rất nhiều . Trừ khi bạn đang tự viết một API XML, bạn sẽ hiếm khi cần phải lo lắng về những chi tiết như thế này.


11
Tôi không thể nói rằng tôi đồng ý. Có vẻ ngu ngốc khi nghĩ rằng chúng ta nên phụ thuộc vào API để trừu tượng hóa chúng ta đến mức chúng ta thậm chí không cần hiểu cách đọc và viết XML. Có lẽ API XML sẽ không giúp bạn nhiều khi bạn cung cấp cho nó một tài liệu không đúng định dạng và nó bị nổ tung. Ai đó sẽ phải sửa dữ liệu để tải nó.
Christopher Painter

@ChristopherPainter Với kích thước của tiêu chuẩn XML, tôi nghi ngờ rằng có rất nhiều người thực sự hiểu nó. Bây giờ có nhiều người nghĩ rằng họ làm, nhưng họ thực sự không.
Phục hồi Monica

2
Chà, bạn phải bắt đầu từ đâu đó. Tất nhiên trong ngành của chúng tôi, chúng tôi chỉ phàn nàn rằng XML quá tệ và bắt đầu lại với một thứ khác như JSON. Sau đó, quá trình lặp lại.
Christopher Painter

14

Câu trả lời mới, cải tiến cho một câu hỏi cũ, thường gặp ...

Khi nào thoát khỏi dấu ngoặc kép trong XML

Dấu ngoặc kép ( ") có thể xuất hiện mà không cần thoát :

  • Trong nội dung văn bản XML:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • Trong các thuộc tính XML được phân tách bằng dấu ngoặc kép ( '):

    <NoEscapeNeeded name='Pete "Maverick" Mitchell'/>

    Lưu ý: chuyển sang dấu nháy đơn ( ') cũng không yêu cầu thoát:

    <NoEscapeNeeded name="Pete 'Maverick' Mitchell"/>

Dấu ngoặc kép ( ") phải được thoát ra :

  • Trong các thuộc tính XML được phân tách bằng dấu ngoặc kép:

    <EscapeNeeded name="Pete &quot;Maverick&quot; Mitchell"/>

Điểm mấu chốt

Dấu ngoặc kép ( ") phải được thoát ra như &quot;trong XML chỉ trong các ngữ cảnh rất hạn chế.


7

Không, không có ký tự thoát như vậy, thay vào đó bạn có thể sử dụng &quot;hoặc thậm chí <![CDATA["]]>để đại diện cho "ký tự.



2

Trong C ++, bạn có thể sử dụng EscapeXML ATL API. Đây là cách chính xác để xử lý các ký tự đặc biệt ...


1

Bạn có thể thử sử dụng dấu gạch chéo ngược theo sau là "u" và sau đó là giá trị unicode cho ký tự, ví dụ: giá trị unicode của dấu ngoặc kép là

"-> U + 0022

Do đó, nếu bạn đặt nó là một phần của văn bản trong XML trong android, nó sẽ trông giống như thế này,

<TextView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:text=" \u0022 Showing double quotes \u0022 "/>

Điều này sẽ tạo ra một văn bản trong TextView gần giống như thế này

"Hiển thị dấu ngoặc kép"

Bạn có thể tìm thấy mã unicode của hầu hết các ký hiệu và ký tự tại đây www.unicode-table.com/en


Bạn có thể tìm thấy mã unicode của hầu hết các ký hiệu và ký tự tại đây unicode-table.com/en
E-max
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.