有什么方法可以在XSLT中禁用默认转义?

时间:2014-05-27 17:12:15

标签: xml xslt saxon

我得到了一个UNIX-Win混合文件,我几乎无法转换。我想尽可能地改变,但是使用SAXON xslt,它会逃脱很多像/这样的字符 - > /和一些CR LF。

除非匹配和规范完成,否则无论如何都要告诉转换不要触及任何内容?

谢谢!

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找属性 - 禁用 - 输出 - 转义

<xsl:value-of select="expression" disable-output-escaping="yes" />

答案 1 :(得分:1)

XSLT不对字符序列进行操作,而是对XPath数据模型定义的树进行操作。 XSLT处理器无法保留输入的某些属性,因为它首先看不到它们。这包括start-tags中属性值规范之间的空白量,文字字符和数字字符引用之间的差异,以及输入中的行边界序列(CRLF,LF或CR)。

如果您想要尽可能少地改变的原因是您有下游流程只能理解XML,那么一些XML用户会告诉您,您应该做的就是摆脱那些破碎的软件并使用XML感知软件。

如果您想要尽可能少地更改它的原因是它格式精美并且您不希望它变得混乱,您可以使用XSLT重现您的漂亮格式。或者不是。

如果您确实需要保留Unix LF序列和Windows CRLF序列之间的区别,您可能需要考虑一些较低级别的事物视图的工具。也许你可以在sed中编写你的转换。也许你可以在sed中编写一个简单的转换,它将把数据转换成一个你可以用XSLT读取,修改和重写的形式,而不会丢失信息(然后另一个sed转换来读取XSLT输出并将它放回到Win / Unix混合格式)。有些人宁愿使用Perl而不是sed。有些人会在Elisp中做到这一切。