2014-06-26 29 views
1

因此,我正在編寫一個XSLT轉換來將XML文件解析爲HTML。一段時間以來,一切進展順利。但是,我遇到了一個問題。基本上,似乎沒有遵循我期望的順序。如何強制XSLT轉換遵循文檔的順序?

在轉換中有一些看起來像這樣的代碼。

<xsl:template match="/" 
<html> 
    <head></head> 
    <body> 
     <h1>Summary</h1> 
     <table> 
      <xsl:apply-templates select="theItem"/> 
     </table> 
    </body> 
</html> 
</xsl:template> 
<xsl:template match="theItem"/> 
    <tr><td>Column1</td><td>Column2</td></tr> 
</xsl:template> 

我希望做的是建立一個表格,併爲每個匹配模板填充一行。

它的作用是打開並關閉表格,然後放置所有行。像這樣的東西。

<table></table> 
<tr> 
    <td> 
     Column1 
    </td> 
    <td> 
     Column2 
    </td> 
</tr> 
<tr> 
    <td> 
     Column1 
    </td> 
    <td> 
     Column2 
    </td> 
</tr> 

那麼究竟發生了什麼?我不知道它是否重要,但我使用msxsl來進行轉換。我也嘗試在數據中嵌入轉換並在IE中打開它。創建相同的問題。我看不出任何方式,這將是預期的行爲,但也許有一些我錯過了。

編輯

注意,我可以在任何數量的任何類型的標籤包裝的模板應用,他們都開放和之前的任何的模板信息緊密所示。

+1

您是否可以顯示您的輸入XML文檔以及複製問題的完整XSLT樣式表?謝謝! –

+1

你的''實際上並不適用。表格行匹配稍後在不同的上下文中應用。也許'theItem'不在你認爲的地方?我們需要看到一些xml能夠確定地知道。 –

+0

您的模板「theItem」不應該「匹配」 - 它應該有一個名稱來從表格生成模板中調用。 – Filburt

回答

1

雖然大部分情況下,這個問題已經過時,如果有人發現類似的錯誤,我想澄清這個問題。

發生了什麼事是,當它在示例代碼中被稱爲

<xsl:apply-templates select="theItem"/> 

沒有匹配。所以它沒有產生任何東西(就像你期望的那樣)。然而,在後面的代碼中,某些東西確實匹配到

<xsl:template match="theItem"/> 
    <tr><td>Column1</td><td>Column2</td></tr> 
<xsl:template> 

並插入所有行,就像它應該。這產生了不希望的效果。

如果有人看到這種行爲,那是我看的第一個地方。確保您的模板實際上是在您期望的時候被調用的,而不是其他時間。這可能會導致看起來像模板的亂序應用程序。感謝所有幫助我找到解決方案的人。

+0

+1「確保你的模板實際上是在你期望的時候被調用的,而不是其他時間。」 –