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



我正在创建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>

我从墨尔本.xml称这个xsl页面。我想使用墨尔本.xml作为主要文件,并从这里处理其他城市。

你们能给我一些想法吗?

附言我是 XML 和 XSLT 的新手。

您可以使用 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>

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

最新更新