2

当我尝试运行我的程序时,我无法弄清楚为什么我不断收到错误“无法编译 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>
4

3 回答 3

12

您在标签中有version两次指定。xsl:stylesheet更正它允许它编译。


附带说明一下,如果您没有可以编译或验证 XSL 的程序,您始终可以使用以下命令通过 Java 运行它

java com.sun.org.apache.xalan.internal.xsltc.cmdline.Compile test.xsl

它将尝试编译您的 XSL 并在那时显示任何语法错误。当您没有合适的工具时,它非常适合解决此类问题。

于 2013-02-08T16:51:44.977 回答
5

您已被告知为什么您的样式表无效,但您需要解决更深层次的问题:您为什么没有看到错误消息?

我不知道你是否使用撒克逊,但症状表明你可能是。如果您尝试从 Java 或 .NET 应用程序中编译样式表,编译错误消息将默认写入 System.err 输出流。在许多情况下,例如在 Web 服务器甚至桌面 GUI 中运行的应用程序中,System.err 的内容可能不会出现在您的屏幕上,因此将输出定向到可以找到它的地方很重要(使用web应用程序,至少在开发过程中,我经常将错误消息写入HTML响应页面)。API 中有多种机制可以实现这一点,例如通过编写自己的 ErrorListener - 详细信息取决于您使用的 API。

或者,使用专门为此目的设计的开发环境(例如 oXygen 或 Stylus Studio)开发和调试您的样式表。

于 2013-02-08T20:17:10.157 回答
2

它没有编译,因为您在“xsl:stylesheet”元素中有两个“版本”属性。导致格式错误的(非 XML)文档。

在 XML 中,一个元素节点不能有两个同名的属性节点。

于 2013-02-08T16:54:26.547 回答