使用XSLT迭代XML生成文本数组时仅输出首个item代码的问题
XSLT仅输出第一个item代码的问题排查
问题根源
你的XSLT代码逻辑本身是正确的,问题出在原始XML的语法错误:第一个<item>节点内的<quantity>标签未正确闭合,写成了<quantity>2</quantity(缺少末尾的>)。XML解析器遇到此类格式错误会终止解析,后续的<item>节点无法被识别,导致XSLT仅能处理第一个item。
修复方案
1. 修正XML语法错误
补全第一个<quantity>标签的闭合符号,修正后的XML代码如下:
<?xml version="1.0" encoding="UTF-8"?> <order id="1021"> <items> <item code="11"> <quantity>2</quantity> <price>50</price> </item> <item code="21"> <quantity>1</quantity> <price>250</price> </item> <item code="13"> <quantity>4</quantity> <price>100</price> </item> </items> <status>3</status> </order>
2. 验证XSLT代码
你的原有XSLT代码无需修改,使用修正后的XML运行即可得到预期输出:[11, 21, 13]
可选:简化XSLT代码(XSLT 2.0+)
如果你的XSLT处理器支持2.0及以上版本,可以使用separator属性简化代码:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:strip-space elements="*"/> <xsl:template match="/order"> <xsl:text>[</xsl:text> <xsl:value-of select="items/item/@code" separator=", "/> <xsl:text>]</xsl:text> </xsl:template> </xsl:stylesheet>
内容的提问来源于stack exchange,提问作者ItsBuddy007
相关产品推荐
相关产品推荐

