Escape karakter kutip ganda dalam XML

101

Apakah ada karakter escape untuk petik ganda dalam xml? Saya ingin menulis tag seperti:

<parameter name="Quote = " ">

tetapi jika saya meletakkan ", itu berarti string telah berakhir. Saya perlu sesuatu seperti ini (c ++):

printf("Quote = \" ");

Apakah ada karakter yang harus ditulis sebelum tanda kutip ganda untuk menghindarinya?

ufukgun
sumber

Jawaban:

174

Coba ini:

&quot;
Andrew Hare
sumber
120

Berikut adalah karakter umum yang perlu di-escape dalam XML, dimulai dengan tanda kutip ganda:

  1. tanda kutip ganda ( ") di-escape ke&quot;
  2. ampersand ( &) di-escape ke&amp;
  3. tanda kutip tunggal ( ') di-escape ke&apos;
  4. kurang dari ( <) di-escape ke&lt;
  5. lebih besar dari ( >) di-escape ke&gt;
Alex Muriithi
sumber
3
Salah; & apos; bukan karakter XML yang valid. Ini adalah karakter HTML yang valid - yaitu SGML dan SUPERset XML.
Stefan Steiger
Meskipun itu poin yang valid, sebagian besar pengurai XML modern yang pernah saya gunakan menerimanya sebagai karakter yang valid.
Dariusz G. Jagielski
& quot; tidak diinterpretasikan dengan benar oleh Android saat string diapit tanda kutip ganda. Dalam hal ini jawaban E-max adalah satu-satunya yang berfungsi.
Softlion
@StefanSteiger ada di daftar ini
OrangeDog
@Dariusz G. Jagielski: Meskipun saya tidak menentang parser XML modern - jika Anda bekerja dengan XML dalam database (misalnya ms / pg), Anda akan melihat bahwa tidak semua perangkat lunak menggunakan parser xml modern. Terutama ketika itu adalah perangkat lunak berusia puluhan tahun yang kompleks. Artinya, jika semua orang menggunakan parser xml modern, itu akan menjadi hal yang baik. Namun, jika kode itu sangat terintegrasi dalam perangkat lunak kompleks yang lebih lama, akan sangat sulit untuk menggantinya (sambil mempertahankan 100% kompatibilitas mundur). Kerugian dari C atau tidak menggunakan injeksi ketergantungan, begitulah.
Stefan Steiger
27

Yang lain telah menjawab dalam hal bagaimana menangani pelarian khusus dalam kasus ini.

Jawaban yang lebih luas bukanlah mencoba melakukannya sendiri. Gunakan API XML - ada banyak tersedia untuk hampir semua platform pemrograman modern yang ada.

API XML akan menangani hal-hal seperti ini untuk Anda secara otomatis, membuatnya menjadi banyak lebih sulit untuk pergi salah. Kecuali Anda membuat API XML sendiri, Anda tidak perlu khawatir tentang detail seperti ini.

Jon Skeet
sumber
11
Saya tidak bisa mengatakan bahwa saya setuju. Tampaknya bodoh untuk berpikir bahwa kita harus sangat bergantung pada API untuk mengabstraksi kita ke titik di mana kita bahkan tidak perlu memahami cara membaca dan menulis XML. API XML itu mungkin tidak akan banyak membantu Anda saat Anda memberinya dokumen yang rusak dan meledak. Seseorang harus memperbaiki data agar dapat dimuat.
Christopher Painter
@ChristopherPainter Mengingat ukuran standar XML, saya ragu ada banyak orang yang benar-benar memahaminya. Sekarang ada banyak yang berpikir demikian, tetapi sebenarnya tidak.
Kembalikan Monica
2
Nah, Anda harus mulai dari suatu tempat. Tentu saja di industri kami, kami hanya mengeluh bahwa XML payah dan memulai kembali dengan sesuatu yang lain seperti JSON. Kemudian prosesnya berulang.
Christopher Painter
15

Jawaban baru yang lebih baik untuk pertanyaan lama yang sering diajukan ...

Kapan harus melepaskan tanda kutip ganda dalam XML

Kutipan ganda ( ") dapat muncul tanpa keluar :

  • Dalam konten tekstual XML:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • Dalam atribut XML yang dibatasi oleh tanda kutip tunggal ( '):

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

    Catatan: beralih ke tanda kutip tunggal ( ') juga tidak memerlukan pelolosan:

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

Kutipan ganda ( ") harus di-escape :

  • Dalam atribut XML yang dibatasi oleh tanda kutip ganda:

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

Intinya

Kutipan ganda ( ") harus di-escape seperti &quot;pada XML hanya dalam konteks yang sangat terbatas.

kjhughes
sumber
7

Tidak ada karakter pelarian seperti itu, sebagai gantinya Anda dapat menggunakan &quot;atau bahkan <![CDATA["]]>untuk mewakili "karakter tersebut.

Matt Howells
sumber
6

Jika Anda hanya perlu mencoba sesuatu dengan cepat, berikut adalah solusi cepat dan kotor. Gunakan tanda kutip tunggal untuk nilai atribut :

<parameter name='Quote = " '>
Brad Cupit
sumber
2

Di C ++ Anda dapat menggunakan EscapeXML ATL API. Ini adalah cara yang benar untuk menangani karakter khusus ...

Neven
sumber
1

Anda dapat mencoba menggunakan garis miring terbalik diikuti dengan "u" dan kemudian nilai unicode untuk karakter tersebut, misalnya nilai unicode dari tanda kutip ganda adalah

"-> U + 0022

Oleh karena itu, jika Anda menyetelnya sebagai bagian dari teks dalam XML di android akan terlihat seperti ini,

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

Ini akan menghasilkan teks dalam TextView kira-kira seperti ini

"Menampilkan tanda kutip ganda"

Anda dapat menemukan unicode dari sebagian besar simbol dan karakter di sini www.unicode-table.com/en

E-max
sumber
Anda dapat menemukan unicode dari sebagian besar simbol dan karakter di sini unicode-table.com/en
E-max