如何使用XSLT将指定XML转换为竖线分隔的目标格式文本?
问题原因
- 现有代码仅遍历了
SubCollection节点,没有嵌套遍历每个SubCollection下的Items子节点,无法生成对应每条Items值的独立行 - 定义的
header变量开头多写了多余的|分隔符,会导致拼接后内容格式错误 - 没有在每行末尾添加换行符,所有输出内容会连在一起
- 不需要额外通过
position()定位SubCollection,在for-each循环内直接取当前上下文的name值即可
正确XSLT实现
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="no" /> <xsl:template match="plan"> <!-- 提取公共前缀字段:src和Id拼接 --> <xsl:variable name="prefix" select="concat(src, '|', Id)" /> <!-- 遍历所有SubCollection节点 --> <xsl:for-each select="CollectionA/SubCollection"> <xsl:variable name="subName" select="name" /> <!-- 嵌套遍历当前SubCollection下的每个Items节点 --> <xsl:for-each select="Attributes/Items"> <!-- 拼接每行内容,末尾加换行符 --> <xsl:value-of select="concat($prefix, '|', $subName, '|', ., '
')" /> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet>
输出说明
上述代码运行后会完全匹配预期的竖线分隔的多行文本格式,每条Items值对应一行输出。
内容的提问来源于stack exchange,提问作者ninja_md
相关产品推荐
相关产品推荐

