【问题标题】:XML to XSL Error loading stylesheet: Parsing an XSLT stylesheet failedXML 到 XSL 加载样式表时出错:解析 XSLT 样式表失败
【发布时间】:2015-07-23 02:16:51
【问题描述】:

我在尝试使用 XSL 转换 XML 文档时遇到此错误。我才刚刚开始使用 XML 进行编码,所以我确信我遗漏了一些简单的东西,但似乎无法在网上找到很多关于它的信息。

Booklist.XML
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="booklist.xsl"?>

<CATALOG>

<BOOK> 
    <NAME> 
        <TITLE>Caring for Sheep</TITLE> 
    </NAME>
    <PAGES> 60 </PAGES>
    <PRICE>$34.99</PRICE>
</BOOK>

</CATALOG> 

还有我的 XSL 文件:

  Booklist.XSL

<?xml version="1.0"?>
<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
<xsl:for-each select="CATALOG/BOOK/NAME">
  <div style="background-color:teal;color:white;padding:4px">
    <a href="details.html"><xsl:value-of select="name">;</a>
  </div>
</xsl:for-each>

<xsl:for-each select="CATALOG/BOOK">
  <div style="background-color:teal;color:white;padding:4px">

  </div>
</xsl:for-each>

</body>

任何人都可以在这里看到错误吗?

【问题讨论】:

  • 如果您的 XSL 文件名为 Booklist.XSL 但您的 XML 文档将其称为 booklist.xsl,并且您使用类型敏感的文件系统,这可以解释问题。否则,请告诉我们,您正在运行什么程序导致您提到的错误?具体来说,您是在调用 XSLT 处理器并为其提供 XSL 文件吗?
  • 新 XSL 文件的主要问题是它不是 XSLT 样式表。
  • 你只需要 xslt 命名空间 "w3.org/1999/XSL/Transform" xmlns:xs="w3.org/2001/XMLSchema" version="1.0">"
  • 按照您的要求,您不会通过盯着代码来发现错误。你从错误消息和行号开始,你没有给我们。如果您收到错误消息,为什么不告诉我们它是什么?如果您没有这样做,那么您就是在使用错误的工具开发/测试这个 XSLT。

标签: html xml xslt


【解决方案1】:

通过将文字结果元素 &lt;body&gt; 放在任何模板之外,但不是在顶层,您有点将 Literal Result Element as Stylesheet 简化语法与常规语法混合在一起。如果您想使用这种简化的语法,请去掉 &lt;xsl:stylesheet&gt;&lt;xsl:output&gt; 元素,使 &lt;body&gt; 位于顶层。

此外,XML 和 XPath 在元素名称方面是区分大小写的,因此您需要修复例如“目录”和&lt;CATALOG&gt;

【讨论】:

  • 非常感谢!我已经按照您的建议进行了更改,但仍然没有得到任何东西。我已经更新了我的代码,你能看到其他可能导致这种情况的东西吗?谢谢大家
  • 第 8 行还有一个未闭合的xsl:value-of 元素。
【解决方案2】:

好吧,如果由于某些难以理解简化语法的原因对您不起作用,我建议您使用“正常编码”,在您的情况下是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="1.0">

    <xsl:template match="/">
      <body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
        <xsl:for-each select="/CATALOG/BOOK/NAME">
            <div style="background-color:teal;color:white;padding:4px">
                <a href="details.html"><xsl:value-of select="name"/></a>
            </div>
        </xsl:for-each>

        <xsl:for-each select="/CATALOG/BOOK">
            <div style="background-color:teal;color:white;padding:4px">

            </div>
        </xsl:for-each>

     </body>  
    </xsl:template>
</xsl:stylesheet>

【讨论】:

    猜你喜欢
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    相关资源
    最近更新 更多