在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>
我试着用\与$ 无论有没有运气逃离美元。
有人可以帮助我吗? 谢谢
答
不幸的是,您将无法解析它,因为XML规范禁止在元素名称中使用$
符号(以及其他许多符号)。从XML specification:
的ASCII符号和标点符号,具有相当大的 组的Unicode符号字符一起,被排除的名字,因为 他们更加有用,因为其中的XML名称 使用外环境分隔符XML文档
我说你的选择是要么:
- 修改源系统,如果可能的话,生成COM绕指柔XML
- 通过一些运行XML预处理你的XML,以使其符合,例如使用
_
更换$
符号(这是允许的)
+0
谢谢。如果它是非法的,这对于这种情况就足够了。 – noitib
我不知道$是XML-DTD autorized。 ..你可以在xslt处理之前删除char'$' – GGO
这是一个仍在开发中的过程,所以仍然有机会。我仍在寻找解决方案。如果我找到一个明确指出在标签中使用$是非法的定义,那就是我的解决方案。谢谢! – noitib
像史蒂夫在他的第2点,我建议删除char预处理xslt。不在一代。 – GGO