繁体   English   中英

xslt 转换(json 到 csv)

[英]xslt transform (json to csv)

我正在尝试使用 xslt 将 json 转换为 csv。

这是我的 XSLT 样式表。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:map="http://www.w3.org/2005/xpath-functions/map"
    xmlns:array="http://www.w3.org/2005/xpath-functions/array"
    exclude-result-prefixes="#all"
    version="3.0">
    
  <xsl:param name="json-string" as="xs:string">[
    {
        "id": "1",
        "name": "manu"
    },
    {
        "id": "2",
        "name": "vivek"
    }
]</xsl:param>

  <xsl:param name="json-xml" select="json-to-xml($json-string)"/>

  <xsl:output method="text"/>

  <xsl:template match="/" name="xsl:initial-template">
    <xsl:value-of select="$json-xml/*/*!string-join(*, ',')" separator="&#10;"/>
  </xsl:template>
  
</xsl:stylesheet>

当数据本身有逗号时,意味着特定数据应包含在双引号内。

例子:-

[
    {
        "id": "1",
        "name": "ma,nu"
    },
    {
        "id": "2",
        "name": "vivek"
    }
]

当前输出:-

1,ma,nu
2,vivek

异常输出:-

1,"ma,nu"
2,vivek

如何修改上面的xslt?

提前致谢

string-join(*, ',')替换为string-join(*!f:escape(.), ',')并编写函数

<xsl:function name="f:escape" as="xs:string" expand-text="yes">
  <xsl:param name="in" as="xs:string"/>
  <xsl:choose>
    <xsl:when test="contains($in, ',')">"{$in}"</xsl:when>
    <xsl:otherwise>{$in}</xsl:otherwise>
  </xsl:choose>
</xsl:function>

(但是如果值也包含引号呢?此时,CSV 的方言开始做自己的事情......)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM