XML仅使用XSL样式表显示背景颜色

时间:2015-08-30 10:11:48

标签: xml xslt xhtml

我创建了2个文件:book.xml和book.xsl。我正在尝试打开xml文件并显示xsl信息。但是,只显示背景颜色,而没有其他文本。

对于我的类分配,我需要做的就是能够证明我可以将XML传输到另一种类型的文件(如XHTML)。

我使用的是Firefox和Internet Explorer,它只显示背景颜色。 Chrome根本不显示任何内容。

我在PC上使用Windows 7。

任何帮助将不胜感激!

以下是我目前输入的代码:

XML

<!-- book.xml file -->

<?xml version="1.0" encoding="UTF-8"?>

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

<bookstore>
    <h1>List of Books for Sale</h1>
    <li>
    <book>
        <title>Harry Potter and the Sorcerer's Stone</title>
        <author>Author: J.K. Rowling</author>
        <year>Publish Year: 1997</year>
        <price>Price: $29.95 USD</price>
    </book>

    <book>
        <title>Hunger Games</title>
        <author>Author: Suzanne Collins</author>
        <year>Publish Year: 2008</year>
        <price>Price: $39.95 USD</price>
    </book>

    <book>
        <title>Game of Thrones</title>
        <author>Author: George R.R. Martin</author>
        <year>Publish Year: 1996</year>
        <price>Price: $16.95 USD</price>
    </book>
    </li>
</bookstore>

XSLT

<!-- book.xsl' file -->

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

<!-- Transfer this HTML to XHTML for display -->

<xsl:template match="/">

    <html> 
        <head> 
            <title> List of Books For Sale </title> 
        </head>
        <body style="background-color:ivory">

            <!-- This is the template logic for the book elements 
            when several nodes match an XPath expression. -->

            <xsl:for-each select="bookstore/book">
                <xsl:apply-templates select="title" />
                <xsl:apply-templates select="author" />
                <xsl:apply-templates select="year" />
                <xsl:apply-templates select="price" />
            </xsl:for-each>

        </body>
    </html>

    </xsl:template>


    <!-- templates for the name and author elements--> 

        <xsl:template match="title">
            <div style="display:list-item; color:black; margin-left:20pt;">
                <xsl:value-of select="." /> 
            </div>
        </xsl:template>

        <xsl:template match="author">
            <div style="display:list-item; color:black; margin-left:20pt;">
                <xsl:value-of select="." /> 
            </div>
        </xsl:template>


            <xsl:template match="year">
                <div style="display:list-item; color:black; margin-left:20pt;">
                    <xsl:value-of select="." />
                </div>
            </xsl:template>


            <xsl:template match="price">
                <div style="display:list-item; color:black; margin-left:20pt;">
                    <xsl:value-of select="." />
                </div>
            </xsl:template>

        </xsl:stylesheet>

1 个答案:

答案 0 :(得分:2)

在您的XML中,book元素嵌套在li元素中,但您没有考虑用于选择book元素的XPath表达式中的元素。

而不是这样做......

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

你只需要这样做......

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

另请注意,您的输入XML在您的问题中格式不正确,因为您缺少结束</bookstore>标记。