2013-02-08 83 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