分享
三行代码  ›  专栏  ›  技术社区  ›  Robotics Lab

不分析xml字符实体

  •  0
  • Robotics Lab  · 技术社区  · 1 周前

    我正在处理一个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
    
    1 回复  |  直到 1 周前
        1
  •  1
  •   kjhughes    1 周前

    要点: 实体扩展发生 在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.属性 .
    2. 强制属性替换发生在 服务器.xml .
    3. catalina.属性 文件。