You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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>

逻辑说明

  1. 外层<xsl:for-each select="GeneratedDocument/Detail/DetailLine">:遍历所有DetailLine元素,每循环一次生成一个<tr>(表格行)。
  2. 内层<xsl:for-each select="FormField">:基于当前DetailLine,遍历其下所有FormField元素,每循环一次生成一个<td>(表格单元格),并输出对应的DisplayValue内容。
  3. 因为每个DetailLine固定包含10个FormField,所以每行自动生成10列,完全匹配需求。

内容的提问来源于stack exchange,提问作者Nicole Cristini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:05:24