我有一个包含特殊字符的xml,我正在使用xsl将这个xml转换为json。然而,它正在生成无效的json与解析错误。
这里是我的输入xml-
<?xml version="1.0" encoding="utf-8"?>
<root>
<mydata>
<data1>
<Description>670054 [ CS\48] AGSB ON ROAD</Description>
</data1>
</mydata>
</root>
我正在尝试的XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes" />
<xsl:template match="/">
{
"Data":[{
"ShortDescription":<xsl:value-of select="root/mydata/data1/Description"/>
}]}
</xsl:stylesheet>
预期产出-
{
"Data":[
{
"Id": "670054",
"ShortDescription": "670054 [ CS\48] AGSB ON ROAD"
]
}
任何帮助将被感激!
XSLT 3.0包含了输出JSON的功能。在早期的版本中,你可以使用文本输出方法 "手工 "完成,这就是你在这里所做的。但是,正确的格式化输出JSON完全是你的责任,特别是包括特殊字符的转义,如引号、换行和反斜杠。这在XSLT 2.0中使用replace()函数就很容易了,而在XSLT 1.0中就比较复杂了,不过exslt.org有一些模板,你可以将其整合到你的样式表中,比如str:replace。
当你在这个网站上询问有关XSLT的问题时,请说明你能够使用哪个XSLT版本。这往往会对答案产生影响。问题是XSLT 1.0现在已经很老了,但(像COBOL一样)很多人似乎还在使用它。
在这里我找到了一个解决有效json这个问题的办法。
<xsl:template name="handleBackSlash">
<xsl:param name="string" select="."/>
<xsl:choose>
<xsl:when test="contains($string, '\')">
<xsl:value-of select="concat(substring-before($string, '\'), '\\' )"/>
<xsl:call-template name="handleBackSlash">
<xsl:with-param name="string" select="substring-after($string, '\')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
然后调用template
<xsl:call-template name="handleBackSlash">
<xsl:with-param name="string" select="Description"/>
</xsl:call-template>
• PostgreSQL - 如何在文本字段中查找特殊字符、空格、额外制表符和回车符?
• How to send special characters in HttpPost payload c#
• 如果用特殊字符(例如 R 中的“+”符号)分隔,则为数据框中的项目创建新行
• Flutter:解析带有特殊字符的 Json (utf-8)
• wordpress 中的 PHP CSV 导出用 html 代码替换特殊字符
• 为什么在数据库查询中使用带有特殊字符的请求参数无法找到结果,但与固定值相同的字符串却可以正常工作?
• 使用共享点中的 CAML 查询从具有特殊字符 (%) 的文件夹中检索文件
• 如何在 Java 中保留 XML 结构的同时替换 XML 属性中的特殊字符
• ASWebAuthenticationSession/Azure AD B2C - 错误:提供的方案无效。方案 > 不应包含特殊字符,例如“:”或“/”
• 如果在两个特定字符之间发现特殊字符,则从文件中删除该特殊字符[关闭]