在xsl中处理有效JSON的特殊字符。

问题描述 投票:0回答:1

我有一个包含特殊字符的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"

        ]
        }

任何帮助将被感激!

json xml xslt
1个回答
1
投票

XSLT 3.0包含了输出JSON的功能。在早期的版本中,你可以使用文本输出方法 "手工 "完成,这就是你在这里所做的。但是,正确的格式化输出JSON完全是你的责任,特别是包括特殊字符的转义,如引号、换行和反斜杠。这在XSLT 2.0中使用replace()函数就很容易了,而在XSLT 1.0中就比较复杂了,不过exslt.org有一些模板,你可以将其整合到你的样式表中,比如str:replace。

当你在这个网站上询问有关XSLT的问题时,请说明你能够使用哪个XSLT版本。这往往会对答案产生影响。问题是XSLT 1.0现在已经很老了,但(像COBOL一样)很多人似乎还在使用它。


0
投票

在这里我找到了一个解决有效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#

如何在 Retrofit2 中处理空 JSON?

ADO.Net 中的特殊字符问题

如果用特殊字符(例如 R 中的“+”符号)分隔,则为数据框中的项目创建新行

Flutter:解析带有特殊字符的 Json (utf-8)

在 Flink 管道中高效处理 JSON 消息

wordpress 中的 PHP CSV 导出用 html 代码替换特殊字符

为什么在数据库查询中使用带有特殊字符的请求参数无法找到结果,但与固定值相同的字符串却可以正常工作?

错误无效的正则表达式转义,同时允许特殊字符选项

使用共享点中的 CAML 查询从具有特殊字符 (%) 的文件夹中检索文件

如何在 Java 中保留 XML 结构的同时替换 XML 属性中的特殊字符

mysql数据库中的特殊字符

ASWebAuthenticationSession/Azure AD B2C - 错误:提供的方案无效。方案 > 不应包含特殊字符,例如“:”或“/”

如果在两个特定字符之间发现特殊字符,则从文件中删除该特殊字符[关闭]

如何使用“else if”语句来注册数字或特殊字符?

INSERT 模式下的 ν 字符未打印

使用 T-SQL Xquery 从 XML 中提取数据,其中低 ASCII 表示为“”?或者只使用 T-SQL?

在 php 中替换两个字符(特殊符号)之间的字符串

无法将 Robocopy 与名称中包含特殊字符的文件夹一起使用

热门问答
最新问题