使用param值作为位置

时间:2013-12-17 13:42:28

标签: xml xslt

我有几个XML文档,其中每个文档都是一本书的一章。所有这些文件都合并到一个DOMDocument中,其中<book>被添加为根元素。

DOMDocument获得以下结构:

<book>
<chapter title="This is the first chapter">
    <section title="This is the first section">
    <paragraph title="This is the first paragraph">This is the paragraph content</paragraph>
    </section>
    </chapter>
<chapter title="This is the second chapter">
    <section title="This is the first section">
    <paragraph title="This is the first paragraph">This is the paragraph content</paragraph>
    </section>
    </chapter>
</book>

我成功制作了一个目录,我可以选择带有查询字符串链接的章节(即default.php?chapter = 1)。当我尝试打开一个章节时,param“chapter”被设置为查询字符串。

如何成功显示与查询字符串相同的章节?从param设置位置我遇到了问题。我收到“未定义变量”错误。但是当我在value-of中使用它时没有错误。

<xsl:param name="chapter" />

    <xsl:template match="//chapter[$chapter]">
            <html>
            <head>
                <title><xsl:value-of select="$chapter"/> - <xsl:value-of select="@title"/></title>
            </head>
            <body>              
        <h1>
            Chapter <xsl:value-of select="$chapter"/> <xsl:value-of select="@title"/>
        </h1>
        <xsl:apply-templates />
            </body>
        </html>
    </xsl:template>

所以,我想要的是当用户访问“default.php?chapter = 1”时,他会得到唯一的第1章:

<html>
<head>
<title>Chapter 1 - This is chapter 1</title>
</head>
<body>
<h1>Chapter 1 - This is chapter 1</h1>
blablablablablablabla
</body>
</html>

1 个答案:

答案 0 :(得分:0)

如果将此XSLT应用于源XML:

<xsl:param name="chosenChapter" select="'1'"/>

<xsl:template match="/">
    <list>
        <xsl:apply-templates select="book/chapter[position() = $chosenChapter]"/>
    </list>
</xsl:template>


<xsl:template match="chapter">
    <xsl:param name="chapter" select="@title"/>


    <html>
        <head>
            <title><xsl:value-of select="$chosenChapter"/> - <xsl:value-of select="$chapter"/></title>
        </head>
        <body>              
            <h1>
                Chapter <xsl:value-of select="$chosenChapter"/> <xsl:value-of select="$chapter"/>
            </h1>
            <text>
                <xsl:apply-templates />
            </text>
        </body>
    </html>
</xsl:template>

你得到这个输出:

<?xml version="1.0" encoding="UTF-8"?>
<list>
    <html>
            <head>
                    <title>1 - This is the first chapter</title>
            </head>
            <body>
                    <h1> Chapter 1This is the first chapter</h1>
                    <text> This is the paragraph content </text>
            </body>
    </html>
</list>

我编辑了我的问题。我希望这有帮助。在<xsl:template match=""中,您无法添加变量,但可以在<xsl:apply-templates select=""中添加变量。在我的示例中,chosenChapter被硬编码为“1”。

祝你好运, 彼得