2012-04-15 17 views
0

我給你一些背景來解釋我的問題:一個XML和XSL幾個(幾個觀點)

我有一個XML文件和一個XSL文件是這樣的:

data.xml中:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="overview.xsl"?> 
<catalog> 
    <cd> 
    <title>Empire Burlesque</title> 
    <artist>Bob Dylan</artist> 
    <country>USA</country> 
    <company>Columbia</company> 
    <price>10.90</price> 
    <year>1985</year> 
    </cd> 
</catalog> 

和overview.xsl:

<?xml version="1.0" encoding="ISO-8859-1"?> 

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>My CD Collection</h2> 
    <table border="1"> 
    <tr bgcolor="#9acd32"> 
     <th>Title</th> 
     <th>Artist</th> 
    </tr> 

    <xsl:for-each select="catalog/cd"> 
    <tr> 
     <td><xsl:value-of select="title"/></td> 
     <td><xsl:value-of select="artist"/></td> 
    </tr> 
    </xsl:for-each> 
</table> 
</body> 
</html> 
</xsl:template> 

</xsl:stylesheet> 

當我在Firefox中打開data.xml中,一切都很好,就像我想。 現在,我想有2個我的CD目錄的意見。一個視圖是一個「概述」,一個是「擴展」,這意味着,我需要2個不同的xsl。

我嘗試這樣做:

view1.xml:

<?xml-stylesheet type="text/xsl" href="overview.xsl"?> 
<xml-file href="data.xml" /> 

view2.xml:

<?xml-stylesheet type="text/xsl" href="extended.xsl"?> 
<xml-file href="data.xml" /> 

和我刪除部份行:

<?xml-stylesheet type="text/xsl" href="overview.xsl"?> 

從數據。 xml

我希望能夠在閱讀view1.xml時使用overview.xsl讀取CD目錄,並在閱讀view2.xml時閱讀相同的CD目錄,但使用extended.xsl格式。

但它只是部分工作。不知何故,我的overview.xsl無法找到節點了。我獲得了一個標題爲ab html表但沒有數據的網頁。我想,我需要改變:

<xsl:for-each select="catalog/cd"> 

到別的東西。你有什麼主意嗎?

作爲信息,我試圖做到這一點,而不使用JavaScript來加載另一個xsl文件。

感謝您的幫助。 朱莉

+0

嘗試'select =「// cd」'作爲測試。應該選擇所有'cd'元素,而不管文檔中的位置。如果失敗了,還有其他的錯誤。 – Torious 2012-04-15 18:17:47

+0

感謝您的回覆。我得到相同的結果...其他的東西應該是錯的.. – julie 2012-04-15 19:21:54

回答

1

我不知道你從哪裏得到了<xml-file>的想法:這對我來說是新的。但是,你可以把它用在你的stylesheet處理它的工作:

<xsl:template match="xml-file"> 
    <xsl:apply-templates select="document(@href)/catalog"/> 
</xsl:template> 

只是要小心匹配=「/」模板,現在要麼文件,這很容易導致無限遞歸的根相匹配。

如果事情變得更加複雜,您需要做的替代方法是編寫客戶端JavaScript來調用轉換,而不是使用xml樣式表處理指令。