首先我必须说,我不是 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>
有什么想法可以解决这个问题吗?
尝试类似:
<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>
您可以在此处看到它的工作原理。