XSLT - 如何在一个 <fo:block> xslt-fo 中获取相同的 xml 元素值



我正在将xml转换为xsl-fo。。。在下面的XML中如何获取相同XML元素<cd>的值。

XML

<?xml version="1.0" encoding="UTF-8"?>
<header>
<child-A>
<element>
<cd>100</cd>
<cd>message</cd>
<example>text</example>
</element>
</child-A>
<child-B>
<element>
<cd>10</cd>
<cd>test</cd>
<example>textB</example>
<cd>testvalue</cd>
</element>
<child-/B>
</header>

在这个Xml中,我想获得child-A/element/中所有<cd>Xml元素的值(两个cd元素的值)。

XSLT 1.0

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" indent="yes" />
<xsl:template match="/header">      
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="child-A/element">   
<fo:block>      
<xsl:value-of select="cd">
</fo:block>
</xsl:template>
</xsl:stylesheet>

这里我得到的是元素的第一个值,但不是第二个。。

输出我得到

<fo:block>100<fo:block>

输出我想要

<fo:block>100
message</fo:block>

在带有XSLT2(或3)处理器的XSLT2或3中,您可以使用<xsl:value-of select="cd"/>来获得所有cd元素的字符串串联。使用XSLT1和XSLT1处理器将cd元素推送到另一个模板,例如<xsl:apply-templates select="cd"/>,或者使用内部有xsl:value-of select="."xsl:for-each select="cd"来处理它们。

最新更新