XSLT中for-each循环无法获取book节点下所有元素问题
解决方案
问题根因
你循环选取<book>节点传入自定义模板后,模板没有正确读取传入节点下的<section>子节点和嵌套的书籍详情字段,才会出现执行失效或字段缺失的问题。
完整可运行XSLT实现(符合模板+变量的业务要求)
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 入口匹配模板 --> <xsl:template match="/"> <LocalStore> <xsl:for-each select="//stores/store/books/book"> <xsl:call-template name="buildLocalDetails"> <xsl:with-param name="bookNode" select="."/> </xsl:call-template> </xsl:for-each> </LocalStore> </xsl:template> <!-- 自定义字段映射模板 --> <xsl:template name="buildLocalDetails"> <xsl:param name="bookNode"/> <!-- 变量提取所需字段值 --> <xsl:variable name="section" select="$bookNode/section"/> <xsl:variable name="bookType" select="$bookNode/bookinfo/bookdetails/A"/> <xsl:variable name="bookLPP" select="$bookNode/bookinfo/bookdetails/B"/> <LocalDetails> <section> <xsl:value-of select="$section"/> </section> <BookType> <xsl:value-of select="$bookType"/> </BookType> <BookLPP> <xsl:value-of select="$bookLPP"/> </BookLPP> </LocalDetails> </xsl:template> </xsl:stylesheet>
实现说明
- 保留了你原本选取
<book>节点的for-each逻辑,传入自定义模板的是完整的book节点,可访问该节点下所有层级的字段 - 所有字段通过变量提取、模板调用实现,符合业务规则要求
- 输出结果和你给出的预期结构完全一致,不会丢失
<section>字段
内容的提问来源于stack exchange,提问作者Pinky
相关产品推荐
相关产品推荐

