在WSO2中使用XSLT 1.0实现XML节点分类并生成JSON数组
解决方案:XSLT 1.0实现XML分类转换及对应JSON结构
输入XML示例
假设你的原始XML结构如下:
<Root> <Name> <id>123</id> <CustName>张三</CustName> </Name> <Name> <CustName>李四</CustName> </Name> <Name> <id>456</id> <CustName>王五</CustName> </Name> <Name> <CustName>赵六</CustName> </Name> </Root>
XSLT 1.0转换代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/Root"> <Result> <!-- 归集无id节点的CustName到Create --> <Create> <xsl:for-each select="Name[not(id)]"> <CustName> <xsl:value-of select="CustName"/> </CustName> </xsl:for-each> </Create> <!-- 归集有id节点的CustName到Update --> <Update> <xsl:for-each select="Name[id]"> <CustName> <xsl:value-of select="CustName"/> </CustName> </xsl:for-each> </Update> </Result> </xsl:template> </xsl:stylesheet>
转换后的目标XML
<Result> <Create> <CustName>李四</CustName> <CustName>赵六</CustName> </Create> <Update> <CustName>张三</CustName> <CustName>王五</CustName> </Update> </Result>
对应JSON结构
经过标准XML转JSON工具转换后,会自动将同名下的多个节点合并为数组,结果如下:
{ "Result": { "Create": { "CustName": ["李四", "赵六"] }, "Update": { "CustName": ["张三", "王五"] } } }
关键逻辑说明
- 节点筛选:用
Name[not(id)]匹配没有id子节点的Name元素,Name[id]匹配存在id子节点的Name元素,实现分类归集。 - 数组合并基础:通过
<xsl:for-each>将符合条件的CustName集中放到同一个父节点下,生成多个同名子节点。大多数XML转JSON工具会默认将多个同名子节点转换为JSON数组,满足你的需求。 - 兼容性:完全基于XSLT 1.0语法实现,无需依赖扩展功能,适配大多数XSLT处理器。
内容的提问来源于stack exchange,提问作者Ruby
相关产品推荐
相关产品推荐

