我有几个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>
答案 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”。
祝你好运, 彼得