5

この例ではxml構文エラーがあります:

<?xml version="1.0"?>
<!DOCTYPE foo [
    <!ENTITY rules SYSTEM "file://data.txt">
]>
<extract>
    <data>&rules;</data>
</extract>

data.txtに含まれる場所:

1    <15024
2    >15023

しかしもちろん、テキストファイル(<>)にwmlの特殊文字が含まれているため、構文エラーが発生します。では、これらのデータを未解析のデータとして含めるにはどうすればよいですか?

私はこのような結果が得られることを望んでいます:

<?xml version="1.0"?>
<extract>
    <data><![CDATA[1    <15024
2    >15023]]></data>
</extract>
4

1 に答える 1

2

まず、参考までに、あなたが参照しているのは、解析されていないものではなく、外部の解析された一般的なエンティティです。

data.txt ファイル自体は整形式である必要はありませんが、含める場合は整形式である必要があります。CDATA セクションはエンティティ (外部のものを含む) を解決しないため、外部エンティティ ファイル自体の中でエスケープを行う必要があります (おそらくサーバー側の処理ファイルを介して)。手動でエスケープしたくありません)。

ファイルの内容を制御していて、エスケープを手動で処理したい場合は、各ファイルのテキストをファイル自体内の CDATA ブロックで囲むだけでよいかもしれません。(私は試したり確認したりしていませんが、このようなエンティティが含まれている場合は整形式である必要があるだけなので、うまくいくはずです。)

別の方法として、<and文字をエスケープすることもできます (テキストにシーケンスが含まれている可能性がある場合に備えて、CDATA セクション内では、皮肉なことを除いて、&通常はエスケープする必要はありません。したがって、CDATA アプローチを使用する場合は、この可能性に対処する必要があります)。(外部エンティティは属性内で使用できないため、エスケープやエスケープについて心配する必要はありません。また、これを実行したいとも言いませんでした。)>]]>'"

于 2012-07-11T01:23:12.473 に答える