หลีกเลี่ยงอักขระเครื่องหมายคำพูดคู่ใน XML


101

มีอักขระ Escape สำหรับเครื่องหมายคำพูดคู่ใน xml หรือไม่? ฉันต้องการเขียนแท็กเช่น:

<parameter name="Quote = " ">

แต่ถ้าฉันใส่ "นั่นหมายความว่าสตริงสิ้นสุดลงฉันต้องการสิ่งนี้ (c ++):

printf("Quote = \" ");

มีอักขระที่ต้องเขียนก่อนเครื่องหมายคำพูดคู่เพื่อหลีกหนีหรือไม่?





คำตอบสั้น ๆ : เรื่องที่&quot; เหลือ ...
kjhughes

คำตอบ:



120

นี่คืออักขระทั่วไปที่ต้องใช้ Escape ใน XML โดยเริ่มต้นด้วยเครื่องหมายคำพูดคู่:

  1. เครื่องหมายคำพูดคู่ ( ") จะถูกหลีกเลี่ยงเป็น&quot;
  2. เครื่องหมายและ ( &) จะถูกหนีไปที่&amp;
  3. เครื่องหมายคำพูดเดี่ยว ( ') จะถูกหลีกเลี่ยงเป็น&apos;
  4. น้อยกว่า ( <) ถูกหนีไป&lt;
  5. มากกว่า ( >) จะถูกหนีไปที่&gt;

3
ไม่ถูกต้อง; & apos; ไม่ใช่อักขระ XML ที่ถูกต้อง เป็นอักขระ HTML ที่ถูกต้องซึ่งก็คือ SGML และ SUPERset ของ XML
Stefan Steiger

แม้ว่านั่นจะเป็นจุดที่ถูกต้อง แต่ตัวแยกวิเคราะห์ XML สมัยใหม่ส่วนใหญ่ที่ฉันเคยทำงานด้วยก็ยอมรับว่าเป็นอักขระที่ถูกต้อง
Dariusz G.Jagielski

& quot; Android ตีความไม่ถูกต้องเมื่อสตริงล้อมรอบด้วยเครื่องหมายคำพูดคู่ ในกรณีนี้คำตอบ E-max คือคำตอบเดียวที่ใช้ได้
Softlion

@StefanSteiger อยู่ในรายการนี้
OrangeDog

@Dariusz G.Jagielski: แม้ว่าฉันจะไม่มีอะไรเทียบกับตัวแยกวิเคราะห์ XML ที่ทันสมัย ​​- ถ้าคุณทำงานกับ XML ในฐานข้อมูล (เช่น ms / pg) คุณจะเห็นว่าไม่ใช่ทุกซอฟต์แวร์ที่ใช้ตัวแยกวิเคราะห์ xml ที่ทันสมัย โดยเฉพาะอย่างยิ่งเมื่อเป็นซอฟต์แวร์เก่าแก่ที่ซับซ้อนหลายสิบปี ที่กล่าวว่าถ้าทุกคนใช้ตัวแยกวิเคราะห์ xml ที่ทันสมัยมันจะเป็นสิ่งที่ดี อย่างไรก็ตามหากโค้ดดังกล่าวรวมเข้ากับซอฟต์แวร์ที่ซับซ้อนรุ่นเก่าแล้วจะยากมากที่จะแทนที่ (ในขณะที่ยังคงความเข้ากันได้แบบย้อนกลับ 100%) ข้อเสียของ C หรือการไม่ใช้การฉีดแบบพึ่งพาดังนั้นที่จะพูด
Stefan Steiger

27

คนอื่น ๆ ได้ตอบในแง่ของวิธีจัดการกับการหลบหนีที่เฉพาะเจาะจงในกรณีนี้

คำตอบที่กว้างกว่านั้นคืออย่าพยายามทำด้วยตัวเอง ใช้ XML API - มีมากมายสำหรับทุกแพลตฟอร์มการเขียนโปรแกรมสมัยใหม่ที่มีอยู่

XML API จะจัดการสิ่งต่างๆเช่นนี้ให้คุณโดยอัตโนมัติทำให้ผิดพลาดได้ยากขึ้นมาก เว้นแต่คุณจะเขียน XML API ด้วยตัวเองคุณแทบไม่ต้องกังวลเกี่ยวกับรายละเอียดเช่นนี้


11
บอกเลยไม่เห็นด้วย ดูเหมือนเป็นเรื่องโง่ที่คิดว่าเราควรพึ่งพา API เพื่อทำให้เราเป็นนามธรรมจนถึงจุดที่เราไม่จำเป็นต้องเข้าใจวิธีอ่านและเขียน XML ด้วยซ้ำ Tha XML API อาจไม่ช่วยคุณได้มากนักเมื่อคุณป้อนเอกสารที่ผิดรูปแบบและเกิดการระเบิดขึ้น จะมีคนแก้ไขข้อมูลเพื่อให้โหลดได้
Christopher Painter

@ChristopherPainter ด้วยขนาดของมาตรฐาน XML ฉันสงสัยว่ามีคนจำนวนมากที่เข้าใจจริง ตอนนี้มีหลายคนที่คิดว่าพวกเขาทำ แต่จริงๆแล้วพวกเขาไม่ทำ
Unslander Monica

2
คุณต้องเริ่มที่ไหนสักแห่ง หลักสูตรในอุตสาหกรรมของเราเราบ่นว่า XML แย่และเริ่มต้นใหม่ด้วยอย่างอื่นเช่น JSON จากนั้นกระบวนการจะทำซ้ำ
Christopher Painter

15

คำตอบใหม่ที่ได้รับการปรับปรุงสำหรับคำถามเก่าที่ถามบ่อย ...

เมื่อใดที่จะหลีกเลี่ยงเครื่องหมายคำพูดคู่ใน XML

เครื่องหมายคำพูดคู่ ( ") อาจปรากฏขึ้นโดยไม่หนี :

  • ในเนื้อหาข้อความ XML:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • ในแอตทริบิวต์ XML ที่คั่นด้วยเครื่องหมายคำพูดเดี่ยว ( '):

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

    หมายเหตุ: การเปลี่ยนไปใช้เครื่องหมายคำพูดเดี่ยว ( ') ไม่จำเป็นต้องมีการ Escape:

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

เครื่องหมายคำพูดคู่ ( ") ต้องใช้ Escape :

  • ในแอตทริบิวต์ XML ที่คั่นด้วยเครื่องหมายคำพูดคู่:

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

บรรทัดด้านล่าง

เครื่องหมายคำพูดคู่ ( ") ต้องใช้ Escape เช่นเดียวกับ&quot;XML ในบริบทที่ จำกัด มากเท่านั้น


7

ไม่มีไม่มีอักขระหลีกเช่นนี้ แต่คุณสามารถใช้&quot;หรือใช้<![CDATA["]]>แทน"อักขระได้



2

ใน C ++ คุณสามารถใช้ EscapeXML ATL API นี่เป็นวิธีจัดการตัวอักษรพิเศษที่ถูกต้อง ...


1

คุณสามารถลองใช้แบ็กสแลชตามด้วย "u" จากนั้นค่ายูนิโคดสำหรับอักขระตัวอย่างเช่นค่ายูนิโคดของเครื่องหมายคำพูดคู่คือ

"-> U + 0022

ดังนั้นหากคุณตั้งค่าให้เป็นส่วนหนึ่งของข้อความใน XML ใน Android จะมีลักษณะดังนี้

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

สิ่งนี้จะทำให้เกิดข้อความใน TextView คร่าวๆประมาณนี้

"แสดงเครื่องหมายคำพูดคู่"

คุณสามารถค้นหา Unicode ของสัญลักษณ์และอักขระส่วนใหญ่ได้ที่นี่ www.unicode-table.com/en


คุณสามารถค้นหา Unicode ของสัญลักษณ์และอักขระส่วนใหญ่ได้ที่นี่unicode-table.com/en
E-max
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.