如何循环遍历特定标签并将其逐行显示?

问题描述 投票:0回答:1

我是 XSLT 的初学者。我正在尝试使用 Apache FOP 创建 AFP 文档。 我有一个像这样的输入 XML:

<letter>
 <data>
   <product>
     <a>test</a>
     <b>test1</b>
     <product>
      <charge>
        <one-time-charge>
         <amount>30</amount>
         <info>MNO</info>
        </one-time-charge>
      </charge>
         <product>
          <charge>
           <one-time-charge>
            <amount>10</amount>
            <info>XYZ</info>
           </one-time-charge>
          </charge>
         </product>
         <product>
          <charge>
           <one-time-charge>
            <amount>20</amount>
            <info>ABC</info>
           </one-time-charge>
          </charge>
         </product>
     </product>
    </product>
    </data>
   </letter>

如您所见,“产品”标签有 3 个级别。 “产品”标签级别有时也可以是 2。

预期输出如下:

MNO                                       30
XYZ                                       10
ABC                                       20

无论级别如何,如何循环遍历“info”标签和“amount”标签?

更新:

使用下降轴后:

我能够从这段代码中获取值,但它不会为每个信息添加新行

<xsl:for-each select="data/product/product"> 
 <fo:table-row> 
  <fo:table-cell> 
   <fo:block font-family="Arial" font-size="9pt" font-weight="normal"> 
 <xsl:value-of select="descendant::one-time-charge/info"/> 
 </fo:block> 
 </fo:table-cell> 
<fo:table-cell> 
   <fo:block font-family="Arial" font-size="9pt" font-weight="normal"> 
 <xsl:value-of select="descendant::one-time-charge/amount"/> 
 </fo:block> 
 </fo:table-cell>
 </fo:table-row> 
</xsl:for-each>
      

输出如下:

MNO XYZ ABC                          301020

必填:

MNO                               30
XYZ                               10
ABC                               20
xslt xslt-2.0
1个回答
0
投票

要按照建议使用后代轴,您应该执行以下操作:

<xsl:template match="/">
    <table>
        <xsl:for-each select="//one-time-charge"> 
            <row>
                <cell>
                    <xsl:value-of select="info"/>
                </cell> 
                <cell>
                    <xsl:value-of select="amount"/>
                </cell> 
            </row>
        </xsl:for-each>
    </table>
</xsl:template>
© www.soinside.com 2019 - 2024. All rights reserved.