XSLT3 - xml-to-json() 函数生成未转义的 json

XSLT3 - xml-to-json() function generate un-escaped json

提问人:Binsky 提问时间:11/17/2023 更新时间:11/18/2023 访问量:34

问:

使用 Saxon XSLT 3.0,我正在尝试将 XML 转换为 JSON。第一步是将输入XML转换为所需的Maps & Array格式,即xml-to-json()所需的格式。

当我然后调用函数时

<xsl:result-document href="{$target_json}" method="json">
    <xsl:copy-of select="xml-to-json($intermediate_XML, map{., 'indent':false() })"></xsl:copy-of>
</xsl:result-document>  
        

示例 XML:

<?xml version="1.0" encoding="US-ASCII"?>
<map xmlns="http://www.w3.org/2005/xpath-functions">
   <string key="headline">Matilda sold such dreadful ties</string>
   <string key="body">
&lt;p&gt;Matilda sold such dreadful ties.&lt;/p&gt;
&lt;p&gt;It made Juan retch and...&lt;/p&gt;
</string>
</map>

JSON 结果

"\n { \"headline\" : \"Matilda sold such dreadful ties\",\n \"body\" : \"\\n<p>Matilda sold such dreadful ties.<\\\/p>\\n<p>It made Juan retch and...<\\\/p>\\n\" }"

我所期望和需要的是

{ "headline" : "Matilda sold such dreadful ties", "body" : "\n<p>Matilda sold such dreadful ties.<\/p>\n<p>It made Juan retch and...<\/p>\n" }

没有开头和结尾引号“和所有转义字符。

任何帮助将非常受欢迎,谢谢。

JSON XSLT-3.0

评论


答:

0赞 Martin Honnen 11/17/2023 #1

我不认为您既想要输出方法,也想要使用输出方法,将输出方法用于该函数的结果。jsonxml-to-jsontext

使用 Saxon HE 11 的示例

另一个在 Azure 后端中使用 Saxon HE 11 的示例,这次是使用 xsl:result-document

如果您将数据表示为XDM 3.1映射/数组,则输出方法很有用,例如json

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="3.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="#all">

  <xsl:output method="json" indent="yes"/>

  <xsl:template name="xsl:initial-template">
    <xsl:sequence
      select='map { "headline" : "Matilda sold such dreadful ties", "body" : "&#10;&lt;p>Matilda sold such dreadful ties.&lt;/p>&#10;&lt;p>It made Juan retch and...&lt;/p>&#10;" }'/>
  </xsl:template>

</xsl:stylesheet>

在线示例

评论

0赞 Binsky 11/18/2023
谢谢马丁,你的特殊网站确实提供了我预期的结果。我注意到您没有在代码中使用 xsl:result-document,当我应用您使用 method=“text” 的建议时,输出对我来说保持不变。xsl:result-document 会影响这一点吗?如果需要,我可以使用您的解决方案将额外的步骤附加到处理管道中。
0赞 Martin Honnen 11/18/2023
@Binsky,我在支持的地方添加了另一个示例链接,创建的(您需要在使用 XSLT 按钮后选择该链接)与上一个示例的主要结果具有相同的内容。所以不,使用应该没有区别,关键是,给你一个带有 JSON 的字符串,如果你使用 ,你会得到那个 JSON 字符串,如果你使用 ,你会得到一个 JSON 字符串转义为 JSON 字符串。xsl:result-documentexample1.jsonxsl:result-documentxml-to-jsonmethod="text"method="json"