[英]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=" "/>
</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.