20

引用されたデータを XML に保存する方法として、どのような方法が認められていますか?

たとえば、ノードの場合、どれが正しいですか?

  • (a) <name>Jesse "The Body" Ventura</name>
  • (b) <name>Jesse \"The Body\" Ventura</name>
  • (c) <name>ジェシー「ザ・ボディ」ベンチュラ</name>
  • (d) 上記のいずれでもない (具体的に記入してください)

(a)の場合、属性に対して何をしますか? (c) の場合、HTML と XML を混在させることは本当に適切ですか? 同様に、一重引用符と中引用符をどのように処理しますか?

4

7 に答える 7

29

"要素データでエンコードする必要がある文字ではないため、正解は A & Cです。

CDATA セクション内にない場合に問題が発生しないように><、 、などの文字を常に XML エンコードする必要があります。&これらは、要素データに関して考慮すべき重要な項目です。

属性について話すときは、値を囲むために使用する記号のタイプに応じて、属性値にも注意する必要が'あります。"

"多くの場合、エンコーディング'はあらゆる面でより良いアイデアであることがわかりました。これは、"または'が問題を引き起こす可能性がある他の形式に変換するときに役立つためです。

于 2008-09-29T20:14:16.323 に答える
15

XML 要素内の文字データには、エスケープせずに引用符を含めることができます。XML 要素内で許可されていない唯一の文字は、「<」、「&」、および「>」です (「>」文字は、「]]>」文字シーケンスの一部である場合にのみ許可されません。

引用符をエスケープすることが良い考えではないと言っているわけではありません。引用符をエスケープしないことは完全に有効な XML であると言っているだけです。XML 仕様のセクション 2.4 - 「文字データとマークアップ」を参照してください。

したがって、(a) と (c) はどちらも OK です。

属性に関する限り、属性値は一重引用符または二重引用符のいずれかで囲むことができるため、どちらか一方が含まれている場合は、反対のものを使用して値を囲むことができます。両方を含む場合は、一方または両方に文字エンティティを使用する必要があります。

「curly-quotes」に関する限り、Word が引用符を変換することがある特別な非 ASCII 引用符について話している場合、それらは XML では特別な意味を持たないため、どちらでも実行できます (しかし、それらはできません)。属性値を囲むために使用する必要があります。ドキュメントが正しく解釈されるように、ドキュメントの文字エンコーディングが正しいことも確認する必要があります。

于 2008-09-29T20:46:32.907 に答える
5

テキスト ノード内の二重引用符は、二重引用符文字または&quot;エンティティとして表すことができます。属性値の二重引用符は、値が一重引用符で区切られている場合は二重引用符として表すことができ、その逆も同様です。それ以外の場合は、次のようにエスケープします&quot;

これは、a) XML を認識しないテキスト エディターで XML を編集している場合、または b) 文字列操作によってプログラムで XML を作成している場合にのみ関連します。一般的に言えば、(a) は、自分が何をしているのかを本当に理解しているか、少なくとも編集が完了した後に XML の整形式をチェックする方法がない限り避けるべきです。

また、(b) はどのような状況でも避けるべきです。文字列操作によって XML を作成しないでください。常にDOMまたはその他のツールを使用してください。

于 2008-09-29T21:00:02.483 に答える
4

たとえば、ノードの場合、どちらが正しいですか?

XML仕様自体は、ノードについては説明していません(DTD構文を有限オートマトン正規表現と比較する場合を除く)。DOMノードは、属性、要素、テキスト、またはその他のノードタイプのいずれかです。

テキストノード内では、パーサーが別のノードを開始すると解釈する文字をエスケープするだけで済みます。したがって、<&amp;としてエスケープします。および&lt;

移植性のために、中引用符をエスケープすることはしばしば良い考えですが、XMLテキストのプレーン引用符をエスケープする理由はありません。

属性ノード内では、以前と同様に、より少ないアンパサンドをエスケープする必要があります。また、属性を区切るために使用した引用符もエスケープする必要があります。

<foo attribute="'ok'" attribute2='"also-ok"' attribute3="&quot;needed&quot;"/>

通常、1つのタイプのみを使用し、常にそれをエスケープする習慣を身に付ける方が簡単です。私はかなりの量のXSLTを作成し、「outside」と「inside」を使用することを好みます。

<xsl:value-of select="person[@name = 'bob']"/>

エスケープで妄想的になると、XPathは読みにくくなります。

<xsl:value-of select="person[@name = &apos;bob&apos;"/>

(c)の場合、HTMLとXMLを混在させることは本当に適切ですか?

XMLは、名前付きエンティティampgtltapos、&quotを定義します

HTMLはさらに多くのエンティティを定義します。

数値エンティティを使用するよりも、XMLでXML名前付きエンティティを使用できます。

ltエンティティは<をエスケープしテキストと属性の値で使用する必要があります。ampエンティティはをエスケープし、テキストと属性の値で使用する必要があります。aposおよびquotエンティティは'および"をエスケープし、属性値で使用する必要があります。gtエンティティは少し役に立たない-XMLでエスケープする構文要件はほとんどありません。請求する。

ソースコードを生成するXSLTでよく使用するもう1つは、&#xa;です。これは新しい行を挿入します。&nl; &gt;よりも多く使用されていたでしょう

同様に、一重引用符と中引用符をどのように処理しますか?

XMLはUnicodeテキストをマークアップするように設計されており、中引用符には特別な意味はありません。ただし、XMLドキュメントに使用されるエンコーディングが実際に誤って解釈されることは珍しくありません。したがって、閉じた環境にあり、プロデューサーとコンシューマーで正しいUnicodeエンコーディングを保証できる場合は、XMLに配置するだけです。それ以外の場合は、数字のエンティティを使用します。これは、コードポイントが127を超えるすべての文字に当てはまります。中引用符については特別なことは何もありません。

于 2008-09-29T21:23:54.267 に答える
4

XML でのエンコード方法について心配する必要はありません。XML ドキュメントを生成するには、常に適切なライブラリを使用する必要があります。XML を自分で正しく理解するには、落とし穴が多すぎます。ライブラリを使用せずに適切な XML を自分で生成できると誰かが考えたために、大量の無効な XML ドキュメントが私の元にやってくるのを見てきました。現在使用されているすべての主要なプログラミング言語には、XML ライブラリがあります。

于 2008-09-29T20:27:12.453 に答える
0

それは本当に依存します。XML 文字列に引用符を付けるだけの場合は、'A'.

しかし、意味がある場合、または引用を抽象化する必要がある場合 (i18n など)、XML はより豊富なオプションを提供します。例えば:

<name>
  <given>Jesse</given>
  <family>Ventura</family>
  <nickName>the Body</nickName>
</name>

多くの状況でやり過ぎ。しかし、世界のさまざまな (そしてしばしば一貫性のない) 命名スキームの多くを正しく処理する必要がある場合は、これらの線に沿って名前をエンコードすることを検討します. XML はこれに最適です。

于 2008-09-29T20:39:20.397 に答える
0

正解は「C」です。

単一引用符は実際には問題を引き起こしませんが、アンパサンドと左山括弧には注意する必要があります。

于 2008-09-29T20:12:37.653 に答える