1

「解析されたエンティティ」のことは目前の問題とは何の関係もないので、私は私の質問を言い換えています。

XML1.1と1.0

xml 1.1ライブラリは、違法な文字をシリアル化/逆シリアル化する前にエスケープすることですか?それとも、図書館はそれらを完全に禁止することですか?xml要素にテキストを設定する正しい方法はどれですか?

要素e=new Element( "foo")の場合

私はこれを行う必要があります:

e.setText(sanitized_text_illegal_characters_removed_or_escaped)?

また

e.setText(any_text)

4

2 に答える 2

1

XML パーサーを作成している場合を除き、解析済みエンティティーについて特に気にする必要はありません。<やのようなもの&です。ドキュメント DTD で独自のものを定義できますが、これはめったに使用されない機能です。外部の解析済みエンティティは、コンテンツが別のファイルまたはネットワーク リソースまたはそのような場所に存在するエンティティです。

あなたの主な質問について:

xml 要素にテキストを設定する正しい方法はどれですか?

if Element e = new Element("foo")

私はこれを行う必要があります:

e.setText(string_of_sanitized_data_with_illegal_characters_escaped) ?

また

e.setText(任意のテキスト)

ドキュメントが逆シリアル化されたときに、反対側に表示されるようにテキストを設定する必要があります。これは通常、データをエスケープしてはならないことを意味し、XML ライブラリがこれを行います。

例えば:

  1. 「ベッド & ブレックファースト」というテキストを挿入します。
  2. XML ライブラリはこれを " bed &amp; breakfast" または " <![CDATA[bed & breakfast]]>" またはその他の表現に変換しますが、実際には問題ではありません。
  3. ドキュメントを別の場所に送信します。
  4. もう 1 つのパーサーはドキュメントを読み取り、テキストを元に変換します。
  5. エンド ソフトウェアは、文字列 "bed & breakfast" を取得します。
于 2012-09-07T12:18:23.903 に答える
1

プログラムで XML を記述している場合、解析されたエンティティを使用したくないことはほぼ確実です。

解析されたエンティティには、内部と外部の 2 種類があります。内部で解析されるエンティティは、次のような DTD 宣言によって定義されます。

<!ENTITY me "Mike">

また

<!ENTITY me "<name>Mike</name>">

外部の解析対象エンティティは、次のような DTD 宣言によって定義されます。

<!ENTITY me SYSTEM "me.xml">

エンティティが内部であるか外部であるかに関係なく、次のようなエンティティ参照によって参照できます。

&me;

要素または属性のコンテンツ内に表示できます。

于 2012-09-07T14:23:15.990 に答える