XSLT - 如何循环遍历每个条目,但打印出一行

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

首先我必须说,我不是 XML/XSLT 转换方面的专家。所以请耐心等待。 我有以下 XML 结构。

<cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:Note>Some remark text</cbc:Note>
    <cbc:Note>Charge: 1234567*</cbc:Note>
    <cbc:Note>Quantity: 1000*</cbc:Note>
    <cbc:Note>Charge: 987654*</cbc:Note>
    <cbc:Note>Quantity: 5000*</cbc:Note>
    ...
</cac:InvoiceLine>

Charge
Quantity
已连接。
Charge
1234567 的
Quantity
为 1000 公斤。 现在我想循环遍历列表并在一行(!)中打印所有连接的数据,例如:

1000公斤收费1234567

5000公斤收费987654

我尝试了以下代码,但实际上此代码为每个

<cbc:Note>
字段打印一个新行。

<xsl:for-each select="./cbc:Note">
  <xsl:choose>
    <xsl:when test="contains(.,'Charge:')">
      <xsl:value-of select="substring-before(substring-after(.,'Charge:'),'*')"/>
      <br />
    </xsl:when>
    <xsl:when test="contains(.,'Menge:')">
      <xsl:value-of select="substring-before(substring-after(.,'Quantity:'),'*')"/>
      <br />
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="."/>
      <br />
    </xsl:otherwise>
  </xsl:choose>
</xsl:for-each>

有什么想法可以解决这个问题吗?

xslt
1个回答
0
投票

尝试类似:

<xsl:template match="cac:InvoiceLine">
    <xsl:for-each select="cbc:Note[starts-with(., 'Charge: ')]">
        <xsl:value-of select="substring-before(substring-after(following-sibling::cbc:Note[1], 'Quantity: '), '*')"/>
        <xsl:text> kg </xsl:text>
        <xsl:value-of select="substring-before(., '*')"/>
        <br/>
    </xsl:for-each>
</xsl:template>

您可以在此处看到它的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.