【发布时间】:2021-08-07 18:56:36
【问题描述】:
由于将解析的 JSON 数据展平,我需要添加一些 cmets 作为标题和代码行分隔符,以便更好地了解 XML 结果。注释字段中的文本可以来自 JSON 中的高级键,也可以只是在创建 cmets 时手动添加。
我尝试在 XSL 中添加创建 cmets 的标准方法,但由于我使用的模板匹配多个节点,结果是 cmets 出现在每个转换后的元素之上的迭代。
如果推荐,也可以通过单独的模板添加 cmets。
您可以在此处找到代码:https://xsltfiddle.liberty-development.net/gVAkJ3X/4
以下是代码的摘录:
JSON 数据:
<data>
{
"ix_hidden": [
{
"CompanyName": "Link Inc",
"OrganisationNumber": "123"
}
],
"other": [
{
"SomethingElse": "Juice"
}
]
}
</data>
XSL:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xbrli="http://www.example.com/1"
xmlns:rot="http://www.example.com/2"
>
<xsl:output method="xml" indent="yes"/>
<!-- Parse JSON to XML -->
<xsl:template match="data">
<report>
<xsl:apply-templates select="json-to-xml(.)/*"/>
</report>
</xsl:template>
<!-- Flatten data, exlude high-level key names-->
<xsl:template match="*[@key and not(*)]">
<xsl:element name="{@key}">
<xsl:value-of select="."/>
</xsl:element>
<!-- Add comments equal as the key values from parsed JSON-->
<!-- Add comment for "ix_hidden" -->
<xsl:comment>Group:ix_hidden</xsl:comment>
<!-- Add comment for "other" -->
<xsl:comment>Group:other</xsl:comment>
</xsl:template>
</xsl:stylesheet>
结果
<?xml version="1.0" encoding="UTF-8"?>
<report xmlns:xbrli="http://www.example.com/1" xmlns:rot="http://www.example.com/2">
<CompanyName>Link Inc</CompanyName>
<!--Group:ix_hidden-->
<!--Group:other-->
<OrganisationNumber>123</OrganisationNumber>
<!--Group:ix_hidden-->
<!--Group:other-->
<SomethingElse>Juice</SomethingElse>
<!--Group:ix_hidden-->
<!--Group:other-->
</report>
想要的结果
<?xml version="1.0" encoding="UTF-8"?>
<report xmlns:xbrli="http://www.example.com/1" xmlns:rot="http://www.example.com/2">
<!--Group:ix_hidden-->
<CompanyName>Link Inc</CompanyName>
<OrganisationNumber>123</OrganisationNumber>
<!--Group:other-->
<SomethingElse>Juice</SomethingElse>
</report>
【问题讨论】:
标签: json xml xslt xslt-2.0 xslt-3.0