【发布时间】:2021-12-31 02:35:18
【问题描述】:
我使用通用 XSL 来标准化不同的嵌套 JSON。 我的 JSON 示例
/soccer2.json
{
"position": "main",
"others": "spiss;sweeper",
"player":
{
"midtbane": [
"offensiv-midtbane",
"defensiv-midtbane"
]
}
}
/soccer1.json
{
"position": "main",
"others": [
{
"wing": "høyreving;venstreving",
"fullback": [
"venstreback",
"høyreback"
]
}
],
"player": [
{
"left": "venstre-midtbane",
"center": "høyre-midtbane",
"right": "sentral-midtbane"
}
]
}
我的 xsl
const myXsl =
fn.head(xdmp.unquote(
`
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<sport>
<xsl:if test="exists(position)">
<positionType>
<xsl:copy-of select="position"/>
</positionType>
</xsl:if>
<!-- <xsl:if test="exists(others)">
<otherPosition>
<xsl:copy-of select="others"/>
</otherPosition>
</xsl:if>
-->
<xsl:if test="exists(player)">
<playerPosition>
<xsl:for-each select="player/child::node()">
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</playerPosition>
</xsl:if>
</sport>
</xsl:template>
</xsl:transform>
`));
const doc = cts.doc('/soccer2.json')
xdmp.xsltEval(myXsl, doc)
意外输出:
/soccer2.json
<sport>
<positionType>main</positionType>
<otherPosition>spiss;sweeper</otherPosition>
<playerPosition>
<midtbane>["offensiv-midtbane", "defensiv-midtbane"]</midtbane>
</playerPosition>
</sport>
预期输出:
/soccer2.json
<sport>
<positionType>main</positionType>
<otherPosition>spiss;sweeper</otherPosition>
<playerPosition>
<midtbane>offensiv-midtbane</midtbane>
<midtbane>defensiv-midtbane</midtbane>
</playerPosition>
</sport>
我希望这项工作在 XSLT 中发挥作用吗?
【问题讨论】:
-
您的描述中缺少某些内容。 XSLT 的输入是 XML,而不是 JSON。 XSLT 3.0 处理器可以读取 JSON - 但您的样式表显示
version="2.0"并且不包含解析JSON 的尝试。显然,在将 JSON 输入 XSL 转换之前,您有一个将 JSON 转换为 XML 的初步阶段。我们需要查看那个 XML。尝试使用仅包含 identity transform template 的样式表来获取它。 -
不用担心,感谢大家的帮助! (我们会非常详细地阅读每条回复和评论。而且我们不会错过任何事情。)
标签: javascript json xslt nosql marklogic