XMLの二重引用符をエスケープする


101

xmlの二重引用符にエスケープ文字はありますか?私は次のようなタグを書きたいです:

<parameter name="Quote = " ">

"を付けた場合、それは文字列が終了したことを意味します。次のようなものが必要です(c ++):

printf("Quote = \" ");

二重引用符の前にエスケープするために書く文字はありますか?





短い答え:&quot; 残りの話...
kjhughes

回答:



118

二重引用符で始まる、XMLでエスケープする必要がある一般的な文字を次に示します。

  1. 二重引用符(")はエスケープされます&quot;
  2. アンパサンド(&)は&amp;
  3. 単一引用符(')はエスケープされます&apos;
  4. より小さい(<)はエスケープされます&lt;
  5. より大きい(>)はエスケープされます&gt;

3
不正解です。&apos; は有効なXML文字ではありません。これは有効なHTML文字であり、SGMLとXMLのスーパーセットです。
Stefan Steiger 2017

それは妥当な点ですが、私がこれまでに取り組んだほとんどのXMLパーサーは、それを有効な文字として受け入れています。
Dariusz G. Jagielski 2017

&quot; 文字列が二重引用符で囲まれている場合、Androidによって正しく解釈されません。この場合、E-maxの回答のみが機能します。
Softlion、


@Dariusz G. Jagielski:私は現代のXMLパーサーに対して何もしていません-データベース(例えばms / pg)でXMLを扱う場合、すべてのソフトウェアが現代のXMLパーサーを使用しているわけではないことがわかります。特にそれが数十年前の複雑なソフトウェアである場合。そうは言っても、誰もが最新のXMLパーサーを使用しているのであれば、それは良いことです。ただし、そのコードが古い複雑なソフトウェアに深く統合されている場合、(100%の下位互換性を維持しながら)コードを置き換えるのは非常に難しくなります。言うまでもなく、Cの依存性、または依存性注入を使用しないことの欠点。
Stefan Steiger、2018

27

他の人は、この場合の特定のエスケープの処理方法に関して回答しています。

より広い答えは、それを自分でやろうとすることではありません。XML APIを使用してください。現在のほとんどすべての最新のプログラミングプラットフォームで利用できるものはたくさんあります。

XML APIはこのようなことを自動的に処理するので、問題が発生しにくくなります。自分でXML APIを作成しているのでない限り、このような詳細について心配する必要はほとんどありません。


11
同意できるとは言えません。XMLの読み書き方法を理解する必要さえないほどにAPIに依存する必要があると考えるのはばかげているように思われます。XML APIは、不正な形式のドキュメントをフィードして爆発した場合、おそらくあまり役​​に立ちません。誰かがデータを修正してロードする必要があります。
Christopher Painter

@ChristopherPainter XML標準のサイズを考えると、XML標準を実際に理解している人が非常に多いとは思えません。今ではそうだと思う人はたくさんいますが、実際はそうではありません。
2015

2
さて、あなたはどこかから始めなければなりませんでした。私たちの業界ではもちろん、XMLがJSONのような他の何かで失敗し、最初からやり直すと不平を言うだけです。その後、プロセスが繰り返されます。
Christopher Painter

14

古い、よくある質問に対する新しい改善された回答...

XMLで二重引用符をエスケープするタイミング

二重引用符(")はエスケープせずに表示されることがあります:

  • XMLテキストコンテンツ:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • 単一引用符(')で区切られたXML属性:

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

    注:単一引用符(')に切り替える場合もエスケープする必要はありません。

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

二重引用符("はエスケープする必要があります

  • 二重引用符で区切られたXML属性:

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

ボトムライン

非常に限定されたコンテキストでのみ、XMLの"ように二重引用符()をエスケープする必要があります&quot;


7

そのようなエスケープ文字はありません。代わりに、&quot;またはを使用し<![CDATA["]]>"文字を表すことができます。



2

C ++では、EscapeXML ATL APIを使用できます。これは特殊文字を処理する正しい方法です...


1

バックスラッシュの後に「u」を付けてから、文字のUnicode値を使用してみてください。たとえば、二重引用符のUnicode値は

"-> U + 0022

したがって、AndroidでXMLのテキストの一部として設定すると、次のようになります。

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

これにより、TextViewにほぼ次のようなテキストが生成されます。

「二重引用符を表示しています」

ほとんどの記号と文字のユニコードは、www.unicode-table.com / enにあります。


ほとんどの記号と文字のユニコードは、こちらunicode-table.com/enで
E-max
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.