这是我的第一篇文章。对不起,如果它有点马虎。所以我正在编译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'>
<!DOCTYPE html>

</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>
之前有很多标签
答案 0 :(得分:0)
我猜你要改变:
<xsl:apply-templates select="$wfb/WFB/PLACE/NAME"/>
到
<xsl:apply-templates select="NAME"/>
或只是简单地:
<xsl:value-of select="NAME"/>