2013-02-08 76 views
1

我無法弄清楚爲什麼當我嘗試運行我的程序時,我總是收到錯誤「無法編譯stlyesheet」。我假設這是我的樣式表中的錯誤,但我似乎無法找到它。XSL無法編譯樣式表

我可能只是看着它,但任何幫助將不勝感激。

謝謝! xsl可以在下面找到。


<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="/"> 
<PhoneBook> 
    <xsl:apply-templates/> 
</PhoneBook> 
    </xsl:template> 
<xsl:template match="AddressEntry"> 
<Entry> 
    <xsl:apply-templates select="Name"/> 
    <xsl:apply-templates select="Address"/> 
</Entry> 
</xsl:template> 
<xsl:template match="Name"> 
<Name> 
<xsl:apply-templates select="LastName"/>, 
<xsl:apply-templates select="FirstName"/> 
</Name> 
</xsl:template> 
<xsl:template match="Address"> 
<LocatorInfo> 
    <xsl:apply-templates select="PostalAddress/Street"/> 
    <xsl:apply-templates select="PostalAddress/City"/> 
<xsl:apply-templates select="PostalAddress/PostalCode"/> 
<xsl:apply-templates select="Phone"/> 
</LocatorInfo> 
</xsl:template> 
<xsl:template match="FirstName"> 
<xsl:value-of select="."/> 
<xsl:value-of select="."/> 
</xsl:template> 
<xsl:template match="LastName"> 
<xsl:value-of select="."/> 
</xsl:template> 
</xsl:stylesheet> 

回答

7

你有你的versionxsl:stylesheet標籤指定了兩次。糾正這個問題可以讓它編譯。


作爲一個側面說明,如果你沒有一個計劃,將使用以下命令

java com.sun.org.apache.xalan.internal.xsltc.cmdline.Compile test.xsl 
編譯或驗證XSL你總是可以通過Java運行

它會試圖編譯你的XSL並且在那個時候顯示任何語法錯誤。當您沒有適當的工具時,對這種問題進行故障排除非常好。

+2

+1,儘管xsltc只適用於XSLT 1.0(從問題OP是否打算使用1.0或2.0,儘管當前樣式表不使用任何特定於2.0的東西)。 – 2013-02-08 17:00:49

+0

非常感謝你,我想我今天早上需要更多的咖啡,應該已經看到了。並感謝您在將來肯定會使用這些建議。 – parchambeau 2013-02-08 17:11:45

+1

+1這是一個瘋狂的長類名。 – JLRishe 2013-02-08 17:14:11

2

它不會編譯,因爲在'xsl:stylesheet'元素中有兩個'version'屬性。導致格式不正確(非XML)文檔。

在XML中,元素節點不能有兩個具有相同名稱的屬性節點。

4

你已經被告知爲什麼你的樣式表無效,但你需要解決更深層次的問題:你怎麼沒有看到錯誤信息?

我不知道你是否使用撒克遜,但症狀表明你可能是。如果您嘗試從Java或.NET應用程序中編譯樣式表,編譯錯誤消息將默認寫入System.err輸出流。在許多情況下,例如在Web服務器甚至桌面GUI中運行的應用程序中,System.err的內容可能不會出現在您的屏幕上,因此將輸出引導到某處可以找到它(帶有Web應用程序,至少在開發期間,我經常將錯誤消息寫入HTML響應頁面)。 API中有各種機制來實現這一點,例如編寫自己的ErrorListener - 具體取決於您使用的API。

或者,您可以使用開發環境(如oXygen或Stylus Studio)來開發和調試您的樣式表。

+0

這是對我來說至關重要的技巧 - 添加我自己的錯誤偵聽器。謝謝! – daniel 2013-11-27 11:35:54

+0

這幫了我。彙編中的實際錯誤隱藏在一個屬性中,我需要看看。 – 2015-06-16 08:34:56