如何用XSLT遍历重复XML的DetailLine元素,每行输出10个DisplayValue?
问题描述
现有XML数据
<DetailLine> <FormField> <Name>Vendor Item</Name> <DisplayValue>0201029</DisplayValue> <Value /> <Value2 /> </FormField> <FormField> <Name>Item Description</Name> <DisplayValue>BOX JUNCTION HF AHC5111 10X10X</DisplayValue> <Value>BOX JUNCTION HF AHC5111 10X10X</Value> <Value2 /> </FormField> <!-- 此处省略剩余8个FormField元素 --> </DetailLine> <DetailLine> <FormField> <Name>Vendor Item</Name> <DisplayValue>0201040</DisplayValue> <Value /> <Value2 /> </FormField> <FormField> <Name>Item Description</Name> <DisplayValue>BOX JUNCTION HF A201608LP 20 X</DisplayValue> <Value>BOX JUNCTION HF A201608LP 20 X</Value> <Value2 /> </FormField> <!-- 此处省略剩余8个FormField元素 --> </DetailLine>
注:每个DetailLine固定包含10个带DisplayValue的FormField元素。
当前XSLT代码(仅支持指定索引的DetailLine)
<xsl:for-each select="GeneratedDocument/Detail/DetailLine[10]/FormField"> <td> <xsl:value-of select="DisplayValue"/> </td> </xsl:for-each>
需求
自动遍历所有DetailLine元素,每个DetailLine对应表格的一行,该行的每一列对应该DetailLine下的一个FormField的DisplayValue(共10列)。
实现方案
通过嵌套两层循环即可实现需求:外层遍历所有DetailLine生成表格行,内层遍历当前行对应的FormField生成单元格。完整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="/"> <html> <body> <table border="1"> <!-- 遍历所有DetailLine,每行对应一个DetailLine --> <xsl:for-each select="GeneratedDocument/Detail/DetailLine"> <tr> <!-- 遍历当前DetailLine下的所有FormField,每个生成一个单元格 --> <xsl:for-each select="FormField"> <td> <xsl:value-of select="DisplayValue"/> </td> </xsl:for-each> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
逻辑说明
- 外层
<xsl:for-each select="GeneratedDocument/Detail/DetailLine">:遍历所有DetailLine元素,每循环一次生成一个<tr>(表格行)。 - 内层
<xsl:for-each select="FormField">:基于当前DetailLine,遍历其下所有FormField元素,每循环一次生成一个<td>(表格单元格),并输出对应的DisplayValue内容。 - 因为每个DetailLine固定包含10个FormField,所以每行自动生成10列,完全匹配需求。
内容的提问来源于stack exchange,提问作者Nicole Cristini
相关产品推荐
相关产品推荐

