XML 字符实体未解析

XML character entities not parsing

我正在处理 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 无效? 为什么 case 1 XML 个实体不解析?

即输出为:

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

关键点:实体扩展发生在解析XML期间。

案例一

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

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

下游处理可能不知道如何处理 &#x6F;&#x72;,而您有 "not working" 的情况。

案例二

在情况 2 中,&#x6F;&#x72; 在解析之前存在于 XML 文件中。解析后,实际上,调用 XML 解析器的程序会看到扩展的实体:

<Resource name="or" />

并且能够 "work" 因为它知道当 @name"or" 时该怎么做。

请注意,如果 catalina.properties 是一个 XML 文件,扩展会发生然后 文件被解析,然后你会回到你的 "working" 案例。

解决方案

选项包括以下之一:

  1. 硬连接 server.xml 中的实体,而不是 catalina.properties 中的实体。
  2. 强制 属性 替换发生在 XML 解析 server.xml 之前。
  3. 在您的 catalina.properties 文件中直接使用 Unicode 字符(未编码为 XML 实体)。