在XML/XSLT中转义美元符号

问题描述:

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

<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> 

我试着用\与$ 无论有没有运气逃离美元。

有人可以帮助我吗? 谢谢

+0

我不知道$是XML-DTD autorized。 ..你可以在xslt处理之前删除char'$' – GGO

+0

这是一个仍在开发中的过程,所以仍然有机会。我仍在寻找解决方案。如果我找到一个明确指出在标签中使用$是非法的定义,那就是我的解决方案。谢谢! – noitib

+0

像史蒂夫在他的第2点,我建议删除char预处理xslt。不在一代。 – GGO

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

的ASCII符号和标点符号,具有相当大的 组的Unicode符号字符一起,被排除的名字,因为 他们更加有用,因为其中的XML名称 使用外环境分隔符XML文档

我说你的选择是要么:

  1. 修改源系统,如果可能的话,生成COM绕指柔XML
  2. 通过一些运行XML预处理你的XML,以使其符合,例如使用_更换$符号(这是允许的)
+0

谢谢。如果它是非法的,这对于这种情况就足够了。 – noitib