当我尝试运行程序时,我无法弄清楚为什么我一直收到错误“无法编译stlyesheet”。我假设我的样式表中有错,但我似乎无法找到它。
我可能只是看着它,但任何帮助将不胜感激。
谢谢! 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>
答案 0 :(得分:10)
您的version
代码中指定了两次xsl:stylesheet
。纠正这个允许它编译。</ p>
作为旁注,如果您没有可编译或验证XSL的程序,则可以使用以下命令始终通过Java运行它
java com.sun.org.apache.xalan.internal.xsltc.cmdline.Compile test.xsl
它将尝试编译您的XSL并在那时显示任何语法错误。当你没有合适的工具时,对于这样的事情进行故障排除是很好的。
答案 1 :(得分:4)
您已被告知为什么样式表无效,但您需要解决更深层次的问题:您怎么没有看到错误消息?
我不知道你是否使用撒克逊人,但症状暗示你可能会这样。如果您尝试从Java或.NET应用程序中编译样式表,则编译错误消息将默认写入System.err输出流。在许多情况下,例如在Web服务器甚至桌面GUI中运行的应用程序中,System.err的内容可能不会出现在屏幕上,因此将输出定向到可以找到它的位置非常重要(使用Web应用程序,至少在开发过程中,我经常将错误消息写入HTML响应页面)。 API中有多种机制来实现这一点,例如编写自己的ErrorListener - 细节取决于您使用的API。
或者,使用专为此目的而设计的开发环境(如oXygen或Stylus Studio)开发和调试样式表。
答案 2 :(得分:2)
它没有编译,因为'xsl:stylesheet'元素中有两个'version'属性。导致格式错误(非XML)文档。
在XML中,元素节点不能有两个具有相同名称的属性节点。