XSL使用for-each循环遍历节点仅输出第一条记录问题求助
问题原因
- 外层循环选择器
DETAILS/PALLETDETAILS仅匹配<DETAILS>直接子级的第一层<PALLETDETAILS>,无法命中嵌套在其内部的第二层<PALLETDETAILS>节点,导致外层循环仅执行1次,遗漏了第二层节点的内容。 - 内层循环使用了以
/开头的绝对路径/DETAILS/PALLETDETAILS/PRODUCTDETAILS,每次执行都会从根节点开始查找,仅能返回第一层<PALLETDETAILS>下的产品数据,即使外层能遍历到第二层,也会输出错误的重复内容。
修正后的XSL代码
<xsl:template match="/"> <!-- 匹配DETAILS下所有层级的PALLETDETAILS节点 --> <xsl:for-each select="DETAILS//PALLETDETAILS"> <palletcounttotal> <xsl:value-of select="PALLETCOUNTTOTAL"/> </palletcounttotal> <!-- 相对路径匹配当前PALLETDETAILS下的所有PRODUCTDETAILS --> <xsl:for-each select="PRODUCTDETAILS"> <prodnum> <xsl:value-of select="PRODNUM"/> </prodnum> <quantity> <xsl:value-of select="QUANTITY"/> </quantity> <boxes> <xsl:value-of select="BOXES"/> </boxes> </xsl:for-each> </xsl:for-each> </xsl:template>
修正说明
- 外层循环的选择器改用
DETAILS//PALLETDETAILS,双斜杠表示匹配<DETAILS>后代所有层级的<PALLETDETAILS>节点,不管嵌套深度,这样两层托盘数据都会被遍历到。 - 内层循环改用相对路径
PRODUCTDETAILS,仅查找当前正在遍历的<PALLETDETAILS>节点下的产品数据,不会跨节点读取错误内容。 - 补充了对应输出标签的定义,保证输出结构和预期完全一致。
内容的提问来源于stack exchange,提问作者Melissa
相关产品推荐
相关产品推荐

