XSLT转换错误

时间:2014-02-18 05:14:40

标签: xml xslt

我是XML和XSLT的新手。我正在努力改变"使用xslt的xml文档。不幸的是,这不能正常工作。我收到以下错误" XSLT转换期间出错:XSLT转换失败。"在尝试加载xml文件时在FireFox中。 Chrome只会加载一个空白页面。 XML和XSLT文件都独立地加载到浏览器中,表明它们都是格式良好的。这是XSL文件:

   
<wb:stylesheet version="3.0"
xmlns:wb="http://www.w3.org/1999/XSL/Transform">

<wb:template match="/">
  <html>
  <body>
    <h2>Name: <wb:value-of select="wb:world/wb:name" /></h2>
    <p><wb:vlaue-of select="wb:world/wb:desc" /></p>
  </body>
  </html>
</wb:template>

</wb:stylesheet>

这是XML文件:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="./world.xsl"?>
<world
xmlns:wb="http://www.w3.org/2001/XMLSchema-instance" 
wb:schemaLocation="./ world.xsd">
    <wb:name>Arizelos</wb:name>
    <wb:desc>
    </wb:desc>
    <wb:nation>
        <wb:name>Whatever</wb:name>
        <wb:map>map01.png</wb:map>
        <wb:number>1</wb:number>
        <wb:desc>Whatever</wb:desc>     
        <wb:county>
            <wb:name>Whatever</wb:name>
            <wb:size>City-State</wb:size>
            <wb:number>1</wb:number>
            <wb:desc>Whatever</wb:desc>     
            <wb:community>
                <wb:name>Test</wb:name>
                <wb:size>City</wb:size>
                <wb:number>1</wb:number>
                <wb:desc>Whatever</wb:desc>     
                <wb:profession>
                    <wb:name>Sorcerer</wb:name>
                    <wb:number>1</wb:number>
                    <wb:desc>Whatever</wb:desc>     
                    <wb:person>
                        <wb:name>Harry Potter</wb:name>
                        <wb:number>1</wb:number>
                        <wb:desc>Whatever</wb:desc>
                        <wb:charsheet>
                        </wb:charsheet>
                    </wb:person>
                </wb:profession>
            </wb:community>
        </wb:county>
    </wb:nation>
    <wb:religion>
        <wb:name>Phony</wb:name>
        <wb:desc>But aren't they all?</wb:desc>
        <wb:deity>
            <wb:name>John Doe</wb:name>
            <wb:gender>Male</wb:gender>
            <wb:desc>I never considered him divine</wb:desc>
        </wb:deity>
    </wb:religion>
</world>

提前感谢您提供的任何帮助:)

1 个答案:

答案 0 :(得分:0)

您的代码存在很多问题。让我指出其中一些。

在XSLT样式表中,

  • 您已为XSLT命名空间声明了非标准前缀:xmlns:wb="http://www.w3.org/1999/XSL/Transform"。虽然你可以使用你想要的任何前缀,xsl是它的事实上的标准。其他一切都让人感到困惑。
  • not 声明了输入XML(http://www.w3.org/2001/XMLSchema-instance)中存在的命名空间。
  • 最重要的是,您使用相同的前缀来表示XML和XSLT样式表中的不同名称空间URI是不幸的。
  • 即使wb:world元素没有命名空间
  • ,也会引用world
  • 您的样式表是3.0版,但您的浏览器仅支持1.0,而XSLT 3.0仍然是一个工作草案。
  • 有一个拼写错误:vlaue-of应该是xsl:value-of

在输入XML中,

  • 有这个名称空间声明:xmlns:wb="http://www.w3.org/2001/XMLSchema-instance"。同样,这是一个非标准前缀 - 您应该使用xsi。但是,我不确定您是否打算将命名空间用于架构实例。

<强>样式表

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wb="http://www.w3.org/2001/XMLSchema-instance">

   <xsl:template match="/">
     <html>
     <body>
       <h2>Name: <xsl:value-of select="world/wb:name" /></h2>
       <p><xsl:value-of select="world/wb:desc" /></p>
     </body>
     </html>
   </xsl:template>

</xsl:stylesheet>

<强>输出

desc为空,因此p内没有输出任何内容。

<html xmlns:wb="http://www.w3.org/2001/XMLSchema-instance">
   <body>
      <h2>Name: Arizelos</h2>
      <p>

      </p>
   </body>
</html>