XML的XSLT问题:<xsl:value>返回空字符串

时间:2016-04-12 08:14:27

标签: xml xslt

我的代码存在一些问题,但我不知道错误是什么。 它应该从XML文件中获取元素并将它们显示为表中的项。该表显示正常,但问题是没有元素。

这是XML:

<?xml version="1.0" encoding="UTF-8"?>
<bibliography>
  <book>
    <title>
      Hello World
    </title>
    <author>
      Ross Andrews
    </author>
    <article>
      Article1
    </article>
    <bookreport>
      Book Report1
    </bookreport>
    <presentation>
      Presentation1
    </presentation>
    <weblink>
      http://stackoverflow.com/questions/1590085/how-do-i-run-an-xslt-file
    </weblink>
    <softwarepackage>
      Word
    </softwarepackage>
  </book>
</bibliography>

这是XSLT:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="books.xml">
<xsl:template match ="\">
    <html>
        <body>
            <h2>
                Bibliography Entries
            </h2>
            <table border="1">
                <tr bgcolor="#9acd32">
                    <th style="text-align:left">
                        Title
                    </th>                       
                    <th style="text-align:left">
                        Author
                    </th>                       
                    <th style="text-align:left">
                        Article
                    </th>
                    <th style="text-align:left">
                        Book Report
                    </th>
                    <th style="text-align:left">
                        Presentation
                    </th>
                    <th style="text-align:left">
                        Web Link
                    </th>                       
                    <th style="text-align:left">
                        Software package
                    </th>
                </tr>
                <xsl:for-each select="">
                    <tr>
                        <td>
                            <xsl:value-of select="title"/>
                        </td>
                        <td>
                            <xsl:value-of select="author"/>
                        </td>                       
                        <td>
                            <xsl:value-of select="article"/>
                        </td>
                        <td>
                            <xsl:value-of select="bookreport"/>
                        </td>
                        <td>
                            <xsl:value-of select="presentation"/>
                        </td>
                        <td>
                            <xsl:value-of select="weblink"/>
                        </td>
                        <td>
                            <xsl:value-of select="softwarepackage"/>
                        </td>
                    </tr>
                </xsl:for-each>
            </table>
        </body>
    </html>
</xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

您的XSLT存在许多问题。第一个是如何声明xsl命名空间

<xsl:stylesheet version="1.0" xmlns:xsl="books.xml">

需要使用特定的名称空间URI定义xsl名称空间前缀,以便XSLT处理器可以识别要处理的XSLT元素

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

如果您希望XSLT转换XML,您应该将以下处理指令添加到XML

<?xml-stylesheet type='text/xsl" href="books.xsl" ?>

下一个问题是您有一个匹配\的模板,但它应该是/以匹配文档元素

<xsl:template match="/">

最后,你有xsl:for-each没有选择任何东西。它应该选择bibliography/book

<xsl:for-each select="bibliography/book">

试试这个XSLT

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

<xsl:template match="/">
    <html>
        <body>
            <h2>Bibliography Entries</h2>
            <table border="1">
                <tr bgcolor="#9acd32">
                    <th style="text-align:left">Title</th>                       
                    <th style="text-align:left">Author</th>                       
                    <th style="text-align:left">Article</th>
                    <th style="text-align:left">Book Report</th>
                    <th style="text-align:left">Presentation</th>
                    <th style="text-align:left">Web Link</th>                       
                    <th style="text-align:left">Software package</th>
                </tr>
                <xsl:for-each select="bibliography/book">
                    <tr>
                        <td>
                            <xsl:value-of select="title"/>
                        </td>
                        <td>
                            <xsl:value-of select="author"/>
                        </td>                       
                        <td>
                            <xsl:value-of select="article"/>
                        </td>
                        <td>
                            <xsl:value-of select="bookreport"/>
                        </td>
                        <td>
                            <xsl:value-of select="presentation"/>
                        </td>
                        <td>
                            <xsl:value-of select="weblink"/>
                        </td>
                        <td>
                            <xsl:value-of select="softwarepackage"/>
                        </td>
                    </tr>
                </xsl:for-each>
            </table>
        </body>
    </html>
</xsl:template>

</xsl:stylesheet>

这个XML

<?xml-stylesheet type='text/xsl" href="books.xsl" ?>
<bibliography>
<book>
    <title>Hello World</title>
    <author>Ross Andrews</author>
    <article>Article1</article>
    <bookreport>Book Report1</bookreport>
    <presentation>Presentation1</presentation>
    <weblink>http://stackoverflow.com/questions/1590085/how-do-i-run-an-xslt-file</weblink>
    <softwarepackage>Word</softwarepackage>
</book>
</bibliography>

http://xsltransform.net/94rmq7f/1

中查看此操作