XML'de çift tırnak karakterinden kaçış


101

Xml'de çift tırnak için bir çıkış karakteri var mı? Şöyle bir etiket yazmak istiyorum:

<parameter name="Quote = " ">

ama "koyarsam, bu dize bitti demektir. Bunun gibi bir şeye ihtiyacım var (c ++):

printf("Quote = \" ");

Çift tırnaktan önce kaçmak için yazılacak bir karakter var mı?





Kısa cevap: &quot; Hikayenin geri kalanı ...
kjhughes

Yanıtlar:



120

Çift tırnak ile başlayarak, XML'de öncelenmesi gereken genel karakterler şunlardır:

  1. çift ​​tırnak ( ") kaçar&quot;
  2. ve işareti ( &) çıkış karakterli&amp;
  3. tek tırnak ( ') kaçtı&apos;
  4. ( <) değerinden daha azına kaçış yapıldı&lt;
  5. ( >) değerinden büyük şuna kaçar:&gt;

3
Yanlış; & apos; geçerli bir XML karakteri değil. Bu geçerli bir HTML karakteridir - SGML ve bir XML’in SUPERsetidir.
Stefan Steiger

Bu geçerli bir nokta olsa da, birlikte çalıştığım çoğu modern XML çözümleyicisi bunu geçerli bir karakter olarak kabul ediyor.
Dariusz G. Jagielski

& quot; dize çift tırnak içine alındığında Android tarafından doğru şekilde yorumlanmaz. Bu durumda, işe yarayan tek cevap E-max cevabıdır.
Softlion

@StefanSteiger bu listede
OrangeDog

@Dariusz G. Jagielski: Modern XML ayrıştırıcılarına karşı hiçbir şeyim olmasa da - bir veritabanında (örneğin ms / pg) XML ile çalışıyorsanız, her yazılım parçasının modern xml ayrıştırıcıları kullanmadığını göreceksiniz. Özellikle karmaşık onlarca yıllık bir yazılım olduğunda. Bununla birlikte, herkes modern bir xml ayrıştırıcı kullansaydı, bu iyi bir şey olurdu. Bununla birlikte, bu kod eski karmaşık yazılıma derinlemesine entegre edilmişse, onu değiştirmek çok zorlaşır (% 100 geriye dönük uyumluluğunu korurken). C'nin dezavantajları veya bağımlılık enjeksiyonu kullanmamanın tabiri caizse.
Stefan Steiger

27

Diğerleri, bu durumda belirli bir kaçışla nasıl başa çıkılacağı konusunda cevap verdiler.

Daha geniş bir cevap, bunu kendiniz yapmaya çalışmamaktır. Bir XML API kullanın - var olan hemen hemen her modern programlama platformu için çok sayıda mevcuttur.

XML API'leri bunun gibi şeyleri sizin için otomatik olarak hallederek, yanlış gitmeyi çok daha zor hale getirir . Kendiniz bir XML API yazmıyorsanız, bunun gibi ayrıntılar hakkında nadiren endişelenmeniz gerekir.


11
Katıldığımı söyleyemem. XML'i nasıl okuyup yazacağımızı anlamamıza bile gerek kalmayacak kadar bizi soyutlamak için API'lere bu kadar güvenmemiz gerektiğini düşünmek aptalca görünüyor. Bu XML API, yanlış biçimlendirilmiş bir belgeyi beslediğinizde muhtemelen size pek yardımcı olmayacak ve patlıyor. Birisinin yüklenmesini sağlamak için verileri düzeltmesi gerekecek.
Christopher Painter

@ChristopherPainter XML standardının boyutu göz önüne alındığında, bunu gerçekten anlayan çok sayıda insan olduğundan şüpheliyim. Şimdi, yaptıklarını düşünen birçok kişi var, ama gerçekten yapmıyorlar.
Unslander Monica

2
Pekala, bir yerden başlamalısın. Elbette sektörümüzde XML'in berbat olduğundan ve JSON gibi başka bir şeyle baştan başladığından şikayet ediyoruz. Ardından süreç tekrar eder.
Christopher Painter

15

Eski, sık sorulan bir soruya yeni, geliştirilmiş yanıt ...

XML'de çift tırnaktan ne zaman kaçılmalı

Çift tırnak ( ") kaçmadan görünebilir :

  • XML metin içeriğinde:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • Tek tırnak işaretleriyle ( ') ayrılmış XML özelliklerinde :

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

    Not: Tek tırnaklara ( ') geçiş yapmak da kaçış gerektirmez:

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

Çift tırnak ( ") atlanmalıdır :

  • Çift tırnak işaretleriyle ayrılmış XML özniteliklerinde:

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

Sonuç olarak

Çift tırnak ( "), &quot;yalnızca çok sınırlı bağlamlarda XML'de olduğu gibi öncelenmelidir .


7

Hayır, böyle bir kaçış karakteri yoktur, bunun yerine karakteri temsil etmek için &quot;veya hatta kullanabilirsiniz .<![CDATA["]]>"



2

C ++ 'da EscapeXML ATL API'yi kullanabilirsiniz. Bu, özel karakterleri kullanmanın doğru yoludur ...


1

Ters eğik çizgiyi takip eden bir "u" ve ardından karakter için unicode değerini kullanmayı deneyebilirsiniz; örneğin, çift tırnağın unicode değeri

"-> U + 0022

Bu nedenle, bunu android'de XML'deki metnin bir parçası olarak ayarlasaydınız, şuna benzer bir şey olurdu,

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

Bu, TextView'da kabaca şuna benzer bir metin oluşturur

"Çift tırnak gösteriliyor"

Çoğu sembol ve karakterin unicode'unu burada bulabilirsiniz www.unicode-table.com/en


Çoğu sembolün ve karakterin unicode'unu burada bulabilirsiniz unicode-table.com/en
E-max
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.