gpt4 book ai didi

json - 如何将XML元素组转换为JSON列表?

转载 作者:行者123 更新时间:2023-12-03 16:59:35 25 4
gpt4 key购买 nike

是否可以应用仅匹配唯一属性的模板?

<node name="region">1</node>
<node name="region">2</node>
<node name="region">3</node>
<node name="place">a</node>
<node name="place">b</node>
<node name="title">test</node>


我想对 @name="region"执行一次模板,对 @name="place"执行一次。可以使用XSLT / XPath 1.0完成吗?

我的最终目标是JSON输出,如下所示:

"container":{
"region":["1","2","3"],
"place":["a","b"],
"title":"test"
}

最佳答案

Muenchian分组方法

您可以使用Muenchian Method解决分组问题。

此输入XML,

<container>
<node name="region">1</node>
<node name="region">2</node>
<node name="region">3</node>
<node name="place">a</node>
<node name="place">b</node>
<node name="title">test</node>
</container>


提供给此XSLT,

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>

<xsl:key name="nodes-by-name" match="node" use="@name"/>

<xsl:template match="container">
<xsl:text>"container": {&#xa;</xsl:text>
<xsl:for-each select="node[count(. | key('nodes-by-name', @name)[1]) = 1]">
<xsl:value-of select="concat('&quot;', @name, '&quot;:')"/>
<xsl:choose>
<xsl:when test="count(key('nodes-by-name', @name)) = 1">
<xsl:value-of select="concat('&quot;', ., '&quot;')"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>[</xsl:text>
<xsl:for-each select="key('nodes-by-name', @name)">
<xsl:value-of select="concat('&quot;', ., '&quot;')"/>
<xsl:if test="position() != last()">,</xsl:if>
</xsl:for-each>
<xsl:text>]</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() != last()">,</xsl:if>
<xsl:text>&#xa;</xsl:text>
</xsl:for-each>
<xsl:text>}</xsl:text>
</xsl:template>

</xsl:stylesheet>


产生此XML输出,

"container": {
"region":["1","2","3"],
"place":["a","b"],
"title":"test"
}


按照要求。

关于json - 如何将XML元素组转换为JSON列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40009895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com