如何使用XSLT的for-each元素遍历嵌套对象实现XML格式转换
解决XSLT中遍历嵌套
Parent和Service节点的问题 没问题,我来帮你搞定这个嵌套遍历的问题。先梳理下你的XML结构:根节点SecrviceRsp下包含一个Application,Application里有多个Parent节点,每个Parent又对应自己的Service节点。用xsl:for-each完全能处理这种嵌套结构,核心是写对节点的相对路径。
我先给你一个完整的可复用XSLT示例:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <!-- 匹配根节点开始转换 --> <xsl:template match="/SecrviceRsp"> <TransformedResponse> <!-- 第一层遍历:遍历Application下的所有Parent节点 --> <xsl:for-each select="Application/Parent"> <ParentRecord> <!-- 获取当前Parent的名称 --> <ParentName> <xsl:value-of select="ParentName"/> </ParentName> <!-- 第二层嵌套遍历:遍历当前Parent下的所有Service节点 --> <xsl:for-each select="Service"> <ServiceRecord> <ServiceName> <xsl:value-of select="ServiceName"/> </ServiceName> </ServiceRecord> </xsl:for-each> </ParentRecord> </xsl:for-each> </TransformedResponse> </xsl:template> </xsl:stylesheet>
核心逻辑解释:
- 第一层
for-each:select="Application/Parent"是从根节点出发的绝对路径,会选中Application下的所有Parent节点,逐个进行处理。 - 第二层嵌套
for-each:select="Service"是相对路径,意思是“当前正在遍历的Parent节点下的所有Service节点”,这样就能精准关联每个父节点对应的服务。 - 即使一个
Parent下有多个Service节点,这个写法也能自动遍历所有服务,不会遗漏。
测试效果示例
用你提供的XML输入(补全了部分内容):
<SecrviceRsp> <Application> <ApplicationName>Application-1</ApplicationName> <Parent> <ParentName>Parent-1</ParentName> <Service> <ServiceName>Service-1</ServiceName> </Service> </Parent> <Parent> <ParentName>Parent-2</ParentName> <Service> <ServiceName>Service-2</ServiceName> </Service> <Service> <ServiceName>Service-3</ServiceName> </Service> </Parent> </Application> </SecrviceRsp>
转换后的输出会是:
<?xml version="1.0" encoding="UTF-8"?> <TransformedResponse> <ParentRecord> <ParentName>Parent-1</ParentName> <ServiceRecord> <ServiceName>Service-1</ServiceName> </ServiceRecord> </ParentRecord> <ParentRecord> <ParentName>Parent-2</ParentName> <ServiceRecord> <ServiceName>Service-2</ServiceName> </ServiceRecord> <ServiceRecord> <ServiceName>Service-3</ServiceName> </ServiceRecord> </ParentRecord> </TransformedResponse>
如果需要调整输出的节点名称或添加其他字段,直接修改TransformedResponse内部的结构即可,核心的嵌套遍历逻辑是通用的。
内容的提问来源于stack exchange,提问作者Lavanya Komarasamy
相关产品推荐
相关产品推荐

