Xml 循环会导致xsl fo具有相同的节点
使用xsl fo在循环中正确显示select值时遇到问题 正如您在xml中看到的,每个Xml 循环会导致xsl fo具有相同的节点,xml,xslt,xsl-fo,Xml,Xslt,Xsl Fo,使用xsl fo在循环中正确显示select值时遇到问题 正如您在xml中看到的,每个都有许多节点。我试图在fo:block标记中显示每个值,但目前它只在一个fo:block上显示所有值,这导致值在一行上挤压在一起,我无法理解 XSL: <xsl:template match="/"> <xsl:for-each select="company/staff"> <fo:block> <xsl:value-o
都有许多
节点。我试图在fo:block标记中显示每个
值,但目前它只在一个fo:block上显示所有值,这导致值在一行上挤压在一起,我无法理解
XSL:
<xsl:template match="/">
<xsl:for-each select="company/staff">
<fo:block>
<xsl:value-of select="@id" />
</fo:block>
<xsl:for-each select="firstname">
<fo:block>
<xsl:value-of select="@name" />
</fo:block>
<fo:block>
<xsl:value-of select="." />
</fo:block>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<company>
<staff id="1">
<firstname name="name_1">
<visited>location_1</visited>
<visited>location_2</visited>
<visited>location_3</visited>
<visited>location_4</visited>
...
</firstname>
<firstname name="name_2">
<visited>location_1</visited>
...
</firstname>
</staff>
<staff id="2">
...
</staff>
</company>
XML:
<xsl:template match="/">
<xsl:for-each select="company/staff">
<fo:block>
<xsl:value-of select="@id" />
</fo:block>
<xsl:for-each select="firstname">
<fo:block>
<xsl:value-of select="@name" />
</fo:block>
<fo:block>
<xsl:value-of select="." />
</fo:block>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<company>
<staff id="1">
<firstname name="name_1">
<visited>location_1</visited>
<visited>location_2</visited>
<visited>location_3</visited>
<visited>location_4</visited>
...
</firstname>
<firstname name="name_2">
<visited>location_1</visited>
...
</firstname>
</staff>
<staff id="2">
...
</staff>
</company>
地点1
地点2
地点3
地点4
...
地点1
...
...
您需要将当前输出fo:block
的代码包装在xsl:for each
中,以便它适用于每个单独的访问的
节点,而不仅仅是第一个:
<xsl:for-each select="firstname">
<fo:block>
<xsl:value-of select="@name" />
</fo:block>
<xsl:for-each select="visited">
<fo:block>
<xsl:value-of select="." />
</fo:block>
</xsl:for-each>
</xsl:for-each>
让XSLT处理器为您完成这项工作,并且对XML未来可能发生的变化更具弹性:
<xsl:strip-space elements="*"/>
<xsl:template match="staff">
<fo:block>
<xsl:value-of select="@id" />
</fo:block>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="firstname">
<fo:block>
<xsl:value-of select="@name" />
</fo:block>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="visited">
<fo:block>
<xsl:value-of select="." />
</fo:block>
</xsl:template>