2

私はserver.xmlファイルを扱っています...

ケース 1:

<?xml version="1.0" encoding="UTF-8"?>

<Resource name="${app.name}" />

catalina.properties私は宣言しましたapp.name

app.name=&#x6F;&#x72;

ケース 2:

<?xml version="1.0" encoding="UTF-8"?>

<Resource name="&#x6F;&#x72;" />

問題は、ケース 2 が機能し、ケース 1 が機能しない理由です。ケース 1 の XML エンティティが解析されないのはなぜですか?

つまり、出力は次のとおりです。

<Resource name= "&#x6F;&#x72;"  />    //in case 1
<Resource name= "or"  />              //in case 2
4

1 に答える 1

1

重要なポイント: エンティティの展開は、XML の解析中に発生します。

ケース1

ケース 1 では、構文解析中にエンティティはありませんResources/@name。XML${app.name}パーサーを呼び出すプログラムは&#x6F;&#x72;、変数をリテラル テキスト に置き換えます。

<Resource name="&#x6F;&#x72;" />

ダウンストリーム処理は を処理する方法を知らない可能性が高く、「機能し&#x6F;&#x72;ていない」ケースがあります。

ケース 2

ケース 2 では、&#x6F;&#x72;解析前に XML ファイルに存在します。事実上、解析後、XML パーサーを呼び出すプログラムは、展開されたエンティティを確認します。

<Resource name="or" />

いつ何をすべきかを知っているので、「働く」ことができ@nameます"or"

catalina.propertiesXML ファイルであったことに注意してください。展開が行われ、そのファイルが解析され、「作業中」のケースに戻ります。

解決

オプションには、次のいずれかが含まれます。

  1. server.xmlではなく でエンティティを配線しcatalina.propertiesます。
  2. の XML 解析の前に、プロパティの置換を強制的に実行しますserver.xml
  3. ファイルで Unicode 文字を (XML エンティティとしてエンコードせずに) 直接使用し catalina.propertiesます。
于 2019-12-03T16:40:09.183 に答える