XML 字符实体未分析



我正在使用服务器.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

关键点: 在 XML 解析过程中会发生实体扩展。

案例1

在情况 1 中,在解析过程中,Resources/@name中没有实体 – 只有${app.name},调用 XML 解析器的程序可能会继续用文字文本&#x6F;&#x72;替换变量:

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

下游处理可能不知道如何处理&#x6F;&#x72;,并且您有"不起作用"的情况。

案例2

在情况 2 中,&#x6F;&#x72;在解析之前存在于 XML 文件中。 解析后,调用 XML 解析器的程序有效地看到实体已展开:

<Resource name="or" />

并且能够"工作",因为它知道@name"or"时该怎么做。

请注意,如果catalina.properties是一个 XML 文件,则在解析该文件之前会发生扩展,您将返回到"工作"案例。

溶液

选项包括以下选项之一:

  1. 硬连线实体server.xml而不是catalina.properties
  2. 强制在对
  3. server.xml进行 XML 解析之前进行属性替换。
  4. catalina.properties文件中直接使用 Unicode 字符(不编码为 XML 实体(。

最新更新