从一个XSLT样式表处理多个XML文档

时间:2012-09-30 22:34:13

标签: python xml xslt xhtml

我正在创建XSLT样式表来从XML文档中提取不同城市的天气预报数据。目前,我有3个XML文件。但我不知道从一个XSLT样式表处理多个XML文档。 我想使用我的一个城市的XML文件作为我的应用程序的主要XML文档,并为所有多个XML文档调用一个XSLT文件。

这是我在墨尔本的XSLT页面:

<xsl:template match="/">
        <xsl:text>Melbourne</xsl:text><br/>
        <xsl:for-each select="product/forecast/area[@description='Melbourne']/forecast-period">
            <xsl:value-of select="text[@type='forecast']"/>
            <xsl:value-of select="text[@type='precis']"/>
            <xsl:value-of select="element[@type='air_temperature_minimum']"/>,
            <xsl:value-of select="element[@type='air_temperature_maximum']"/><br/>
        </xsl:for-each>
        </xsl:template>

我从melbourne.xml调用这个xsl页面。我想使用melbourne.xml作为主文档,并从这里处理其他城市。

你们能给我一些想法吗?

P.S。我是XML和XSLT的新手。

1 个答案:

答案 0 :(得分:0)

您可以使用XSLT函数document()打开外部XML文档。它返回文档节点。它将文档URI作为参数。可选的第二个参数说明如何解释相对URI。

也许更好的选择是将XSLT的输入定义为元文档,其中包含您要处理的文档的URI:

<cities>
  <city url="melbourne.xml"/>
  <city url="timbuktu.xml"/>
</cities>

然后您的XSLT可以从以下内容开始:

<xsl:template match="/cities">
  <xsl:apply-templates select="document(city/@url, .)/product"/>
</xsl:template>

注意:您需要修改模板以匹配“product”而不是/,并相应地更改for-each。