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=or
案例 2:
<?xml version="1.0" encoding="UTF-8"?>
<Resource name="or" />
问题是为什么案例 2 有效而案例 1 无效?
为什么 case 1 XML 个实体不解析?
即输出为:
<Resource name= "or" /> //in case 1
<Resource name= "or" /> //in case 2
关键点:实体扩展发生在解析XML期间。
案例一
在情况 1 中,在解析期间,Resources/@name
中没有实体 – 只有 ${app.name}
,调用 XML 解析器的程序可能会继续替换文字文本, or
, 对于变量:
<Resource name="or" />
下游处理可能不知道如何处理 or
,而您有 "not working" 的情况。
案例二
在情况 2 中,or
在解析之前存在于 XML 文件中。解析后,实际上,调用 XML 解析器的程序会看到扩展的实体:
<Resource name="or" />
并且能够 "work" 因为它知道当 @name
是 "or"
时该怎么做。
请注意,如果 catalina.properties
是一个 XML 文件,扩展会发生然后 文件被解析,然后你会回到你的 "working" 案例。
解决方案
选项包括以下之一:
- 硬连接
server.xml
中的实体,而不是 catalina.properties
中的实体。
- 强制 属性 替换发生在 XML 解析
server.xml
之前。
- 在您的
catalina.properties
文件中直接使用 Unicode 字符(未编码为 XML 实体)。
我正在处理 server.xml 文件...
案例 1:
<?xml version="1.0" encoding="UTF-8"?>
<Resource name="${app.name}" />
在 catalina.properties
我已经声明了 app.name
app.name=or
案例 2:
<?xml version="1.0" encoding="UTF-8"?>
<Resource name="or" />
问题是为什么案例 2 有效而案例 1 无效? 为什么 case 1 XML 个实体不解析?
即输出为:
<Resource name= "or" /> //in case 1
<Resource name= "or" /> //in case 2
关键点:实体扩展发生在解析XML期间。
案例一
在情况 1 中,在解析期间,Resources/@name
中没有实体 – 只有 ${app.name}
,调用 XML 解析器的程序可能会继续替换文字文本, or
, 对于变量:
<Resource name="or" />
下游处理可能不知道如何处理 or
,而您有 "not working" 的情况。
案例二
在情况 2 中,or
在解析之前存在于 XML 文件中。解析后,实际上,调用 XML 解析器的程序会看到扩展的实体:
<Resource name="or" />
并且能够 "work" 因为它知道当 @name
是 "or"
时该怎么做。
请注意,如果 catalina.properties
是一个 XML 文件,扩展会发生然后 文件被解析,然后你会回到你的 "working" 案例。
解决方案
选项包括以下之一:
- 硬连接
server.xml
中的实体,而不是catalina.properties
中的实体。 - 强制 属性 替换发生在 XML 解析
server.xml
之前。 - 在您的
catalina.properties
文件中直接使用 Unicode 字符(未编码为 XML 实体)。