【发布时间】:2013-09-12 01:57:25
【问题描述】:
澄清一下,我使用的是 XSLT 1.0。很抱歉一开始没有具体说明。
我有一个 XSLT 样式表,我想将双引号替换为可以安全进入 JSON 字符串的安全内容。我正在尝试执行以下操作:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/message">
<xsl:variable name="body"><xsl:value-of select="body"/></xsl:variable>
{
"message" :
{
"body": "<xsl:value-of select="normalize-space($body)"/>"
}
}
</xsl:template>
</xsl:stylesheet>
如果我传入了如下所示的 XML,这将始终正常工作:
<message>
<body>This is a normal string that will not give you any issues</body>
</message>
但是,我正在处理一个包含完整 HTML 的正文,这不是问题,因为 normalize-space() 会处理 HTML,但不会处理双引号。这让我很崩溃:
<message>
<body>And so he quoted: "I will break him". The end.</body>
</message>
我真的不在乎双引号是 HTML 转义还是反斜杠前缀。我只需要确保最终结果通过 JSON 解析器。
此输出通过 JSON Lint,将是一个合适的解决方案(反斜杠引号):
{ "body" : "And so he quoted: \"I will break him\". The end." }
【问题讨论】: