json - xslt 转换(json 到 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 的方言开始做自己的事情......)
推荐阅读
- android - Android Kotlin findViewById(R.id.btnSave) 不能为空
- python - 我怎样才能在电视节目中获得实体?(连接电话)
- apache-flink - 为什么在作业提交到 Yarn 后运行 Flink 批处理程序会立即退出?
- mariadb - 收到 10.1.48-MariaDB-0ubuntu0.18.04.1 的 CTE 语法错误
- python - 将 pandas 数据框列合并为 1 列并忽略 NaN
- go - 无法将 res.Data(类型 []twitterstream.rulesResponseValue)转换为类型 []byte
- optimization - .Net 5 是否有后备列表实现?
- post - 在这种情况下如何获取从“POST”发送的数据?
- spring-batch - 如何在 Spring Batch - 不同名称中处理这个用例?
- python - 如何获取传递给函数内函数的对象的名称?