无辜的xsl文件表现邪恶

时间:2015-05-18 06:31:42

标签: html xml html5 xslt

我从这里收集了这个例子。我是xsl的新手,并试图了解它是如何工作的。这里的xsl是为了让他们的派对整理出来的总统。这里我提供了两个我写的xsl文件。一个工作(我平均显示输出)和另一个没有工作(这意味着没有输出到屏幕/我称之为坏)。但是这两个文件都没有给出任何错误。任何人都可以向我解释为什么破碎xsl文件没有显示任何输出?

xml文件:

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='party.xslt'?>
<presidents  >
    <president>
        <number>1</number>
        <name>George Washington</name>
         <birthday>1732-02-22</birthday>
        <took_office>1789-04-30</took_office>
        <left_office>1797-03-04</left_office>
        <party>no party</party>
        <term>
            <term_number>1</term_number>
            <vice_president>John Adams</vice_president> 
        </term>
        <term>
            <term_number>2</term_number>
            <vice_president>John Adams</vice_president>
        </term>
    </president>

    <president>
        <number>2</number>
        <name>Mr.X</name>
         <birthday>1735-10-30</birthday>
        <took_office>1797-03-04</took_office>
        <left_office>1801-03-04</left_office>
        <party>Federalist</party>
        <term>
            <term_number>3</term_number>
            <vice_president>Thomas Jefferson</vice_president>
        </term>
    </president>
    <president>
        <number>2</number>
        <name>John Adams</name>
         <birthday>1735-10-30</birthday>
        <took_office>1797-03-04</took_office>
        <left_office>1801-03-04</left_office>
        <party>Democratic</party>
        <term>
            <term_number>3</term_number>
            <vice_president>Thomas Jefferson</vice_president>
        </term>
    </president>
</presidents>

没有显示输出的xsl:

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>

    <html>
      <body>
        <h1>sorting presidents</h1>
           <xsl:apply-templates select='presidents/president'>
                <xsl:sort select='party' data-type='text'/>
           </xsl:apply-templates>
      </body>
    </html>

</xsl:template>
<xsl:template match='presidents/president'>

    <xsl:apply-templates select='name'/>

</xsl:template>
<xsl:template match='name'>

     <span style='color:red;font-size:40px;'><xsl:value-of select='name'/></span><br/>

</xsl:template>


</xsl:stylesheet>

确实显示输出的xsl:

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>

    <html>
      <body>
        <h1>sorting presidents</h1>
           <xsl:apply-templates select='presidents/president'>
                <xsl:sort select='party' data-type='text'/>
           </xsl:apply-templates>
      </body>
    </html>

</xsl:template>
<xsl:template match='presidents/president'>

    <span style='color:red;font-size:40px;'><xsl:value-of select='name'/></span><br/>

</xsl:template>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

这里没有任何邪恶。

在错误的XSLT中查看匹配 name 的模板:

<xsl:template match='name'>
  <span style='color:red;font-size:40px;'><xsl:value-of select='name'/></span>
  <br/>

通过使用<xsl:value-of select='name'/>,您假设您有另外<name>作为当前匹配的<name>的子级。 <xsl:value-of select='.'/>将产生预期的输出。

与优秀的XSLT相比:

<xsl:template match='presidents/president'>
  <span style='color:red;font-size:40px;'><xsl:value-of select='name'/></span>
  <br/>
</xsl:template>

您正在匹配<president>,而<xsl:value-of select='name'/>指令将成功检索<name>元素作为<president>的子元素,这是XML的正确结构。