XSLT新手求助:如何将基于fieldName字段的重复record节点转换为独立字段
解决XSLT将重复record节点转为独立字段的问题
嘿,作为XSLT新手遇到这种需求太正常了,我给你写个简单易懂的方案,一步步来拆解:
你的输入XML
<root> <record> <fieldName>B</fieldName> <fieldValue>apple</fieldValue> </record> <record> <fieldName>A</fieldName> <fieldValue>mango</fieldValue> </record> <record> <fieldName>C</fieldName> <fieldValue>orange</fieldValue> </record> </root>
对应的XSLT代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 匹配根节点,作为转换入口 --> <xsl:template match="/root"> <root> <!-- 遍历所有record节点逐个处理 --> <xsl:for-each select="record"> <!-- 动态生成以fieldName值为标签的元素 --> <xsl:element name="{fieldName}"> <!-- 填入对应的fieldValue内容 --> <xsl:value-of select="fieldValue"/> </xsl:element> </xsl:for-each> </root> </xsl:template> </xsl:stylesheet>
输出结果(和你期望的完全一致)
<root> <B>apple</B> <A>mango</A> <C>orange</C> </root>
关键逻辑解释
<xsl:template match="/root">:指定从根节点<root>开始处理,是整个转换的起点。<xsl:for-each select="record">:循环遍历根节点下的每一个<record>,确保每个字段都被处理。<xsl:element name="{fieldName}">:这是核心!用{}这种属性值模板语法,把当前record里的<fieldName>值直接作为新元素的标签名,实现动态创建元素。<xsl:value-of select="fieldValue"/>:把对应record里的<fieldValue>内容提取出来,作为新元素的文本内容。
这个写法是XSLT 1.0版本的,兼容性拉满,适合大部分只支持基础XSLT的应用。如果你的工具支持2.0+,还能简化,但这个版本足够解决你的问题啦。
内容的提问来源于stack exchange,提问作者Yad
相关产品推荐
相关产品推荐

