【问题标题】:process multiple XML documents from one XSLT stylesheet从一个 XSLT 样式表处理多个 XML 文档
【发布时间】:2012-09-21 20:34:06
【问题描述】:

我正在创建 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作为主文档,从这里处理其他城市。

你们能给我一些想法吗?

附:我是 XML 和 XSLT 的新手。

【问题讨论】:

    标签: python xml xslt xhtml


    【解决方案1】:

    您可以使用 XSLT 函数 document() 打开外部 XML 文档。它返回文档节点。它以文档 URI(s) 作为参数。可选的第二个参数告诉如何解释相对 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。

    【讨论】:

    • 看起来棒极了。但我试图实施,无法使其工作。令人困惑的是 city/@url 如何知道要解析哪个 url?还有一件事,在哪里放置 代码?在另一个模板中?
    • 我认为您没有仔细阅读我的内容,或者您​​对一般的 XML 和 XSLT 感到困惑。第一段是你的解决方案。剩下的就是细化。 不是代码,而是 XSLT 的新 XML 输入。它提供了您要处理的所有文件的 URL,硬编码。由您来提供正确的 URL。祝你好运。
    猜你喜欢
    • 2011-02-18
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多