逃避美元符号XML / XSLT

时间:2017-10-06 14:15:55

标签: xml xslt escaping

我正在处理使用XSLT转换XML(来自遗留系统)的要求。我遇到了处理带有美元符号的标签的问题(这就是它们在遗留系统中的存储和生成方式)。示例XML文件的示例:

<root>
     <example>
        <problem$tag>12354</problem$tag>                
    </example>
    <thisTagIsOK>sunny day</thisTagIsOK>
</root>

这是我的xslt:

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="example">
    <xsl:apply-templates select="problem$tag>"/>
        print stuff
</xsl:template>
</xsl:stylesheet>

我试图用\和$来逃避美元 两个都没有运气。

有人可以帮我吗? 感谢

1 个答案:

答案 0 :(得分:2)

不幸的是,您将无法像使用XSLT那样解析它,因为XML规范禁止在元素名称中使用$符号(以及许多其他符号)。来自XML specification

  

ASCII符号和标点符号,以及相当大的   Unicode符号字符组,从名称中排除,因为   它们在XML名称的上下文中作为分隔符更有用   在XML文档之外使用

我会说你的选择是:

  1. 如果可能,修改源系统以生成兼容的XML
  2. 运行XML以预处理XML以使其符合规范,例如将$符号替换为_(允许)