XSL重复相同的值,但计算不同值的正确数量

时间:2014-11-23 03:36:58

标签: xml xslt repeat

这是我的第一篇文章。对不起,如果它有点马虎。所以我正在编译WFB.xml中的列表。它有很多关于世界上所有国家的信息。我想获取每个国家的名称并将其打印在我的h2标签中。但是,它会在列表中打印第一个NAME,直到所有位置都已排序。

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>

<xsl:variable name="config"
    select="document('fb_config.xml')"/>
<xsl:variable name="wfb"
    select="document('world_factbook_2008.xml')"/>

<xsl:template match="/">
    <xsl:text disable-output-escaping='yes'>
    &lt;!DOCTYPE html&gt;&#xA;
    </xsl:text>
    <html>
    <head>
        <title>
        <xsl:text>CIA World Factbook</xsl:text>
        </title>
    </head>
    <body>
        <xsl:variable name="wfbYear"
            select="$wfb/WFB/@YEAR"/>

        <h1>
            <xsl:value-of select="concat('CIA World ', $wfbYear, ' Factbook')" />
            <xsl:text></xsl:text>
        </h1>


        <xsl:if test="$config/config/order/@output = 'asc'">
<!-- DIV TEST -->   <xsl:apply-templates select="$wfb/WFB/PLACE" >
                <xsl:sort order="ascending"/>
            </xsl:apply-templates>
        </xsl:if>
        <xsl:if test="$config/config/order/@output = 'dec'">
<!-- DIV TEST -->   <xsl:apply-templates select="$wfb/WFB/PLACE" >
                <xsl:sort order="descending"/>
            </xsl:apply-templates>
        </xsl:if>

    </body>
    </html>
</xsl:template>

<xsl:template match="PLACE">
        <div style="border:1px solid black;">
            <h2>
                <xsl:apply-templates select="$wfb/WFB/PLACE/NAME"/>
            </h2>
        </div>
</xsl:template>
<xsl:template match="NAME">
    <xsl:value-of select="current()"/>
</xsl:template>

</xsl:stylesheet>

目前此代码一遍又一遍地打印Adelie Land。这是xml文件中的第一个NAME。

我认为我的错误在于:

<xsl:template match="PLACE">
        <div style="border:1px solid black;">
            <h2>
                <xsl:apply-templates select="$wfb/WFB/PLACE/NAME"/>
            </h2>
        </div>
</xsl:template>

如果我拿出与NAME匹配的模板,那么这会在一行中打印出所有NAME,并执行此操作直到所有PLACE都已排序。

任何提示或建议?

这是XML页面的外观:

<WFB YEAR="2008">
  <PLACE ID="Adelie_Land" PART_OF="French_Southern_and_Antarctic_Lands">
    <NAME>Adelie Land</NAME>

之前有很多标签

1 个答案:

答案 0 :(得分:0)

我猜你要改变:

 <xsl:apply-templates select="$wfb/WFB/PLACE/NAME"/>

 <xsl:apply-templates select="NAME"/>

或只是简单地:

<xsl:value-of select="NAME"/>