2012-09-30 44 views
0

我正在創建XSLT樣式表以從XML文檔中提取不同城市的天氣預報數據。目前,我有3個XML文件。但是我不知道從一個XSLT樣式表處理多個XML文檔。 我想使用我的一個城市的XML文件作爲我的應用程序的主要XML文檔,併爲所有多個XML文檔調用一個XSLT文件。從一個XSLT樣式表處理多個XML文檔

這是我的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的新手。

回答

0

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

注意:您需要修改模板以匹配「product」而不是/,並相應地更改for-each。

+0

這似乎太棒了。但我試圖執行,無法使其工作。令人困惑的是,city/@ url將如何知道要解析哪個網址?另一件事,在哪裏放置那個的代碼?在另一個模板? – nirmalgyanwali

+0

我想你沒有仔細閱讀我的意見,或者你對XML和XSLT一般都感到困惑。第一段是你的解決方案。剩下的就是細化。 不是代碼,而是XSLT的新XML輸入。它給出了你想要處理的所有文件的URL,硬編碼。由你決定合適的網址。祝你好運。 – bmaisonny