我第一次尝试xsl,并且在3小时内无法打印一行!
顺便说一句。 最简单的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<book>
<author>qqqqqq</author>
<title>Srwrtwt</title>
<title>yoo</title>
<price>$10.00</price>
</book>
xsl的一个版本:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="author">
<html>
</html>
</xsl:template>
<xsl:template match="title">
<h1>
<xsl:apply-templates/>
</h1>
</xsl:template>
</xsl:stylesheet>
输出结果为:
<html></html>
<h1>Srwrtwt</h1>
<h1>yoo</h1>
$10.00
我很好,但是如果我像这样改变xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
</html>
</xsl:template>
<xsl:template match="title">
<h1>
<xsl:apply-templates/>
</h1>
</xsl:template>
</xsl:stylesheet>
这是输出,为什么模板匹配=“标题”现在不起作用?:
<html></html>
事实是我做了类似的例子试图理解为什么会发生这种情况,而在其他情况下它可以工作: 例如:
<?xml version="1.0"?>
<page>
<title>Hello World</title>
<content>
<x>dewjnf</x>
<paragraph>
<resume>This is my first page!</resume>
</paragraph>
</content>
</page>
xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="/">
<html>
<head>
<title>
<xsl:value-of select="page/title" />
</title>
<style>
h1{
color: blue;
font-style: italic;
}
</style>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="title">
<div align="center">
<h1>
<xsl:value-of select="." />
</h1>
</div>
</xsl:template>
<xsl:template match="resume">
<p>
<xsl:apply-templates />
</p>
</xsl:template>
</xsl:stylesheet>
输出正是我对模板匹配工作的预期: 对我而言,似乎与前一个示例完全相同,但行为不同。
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
<style>
h1 {
color: blue;
font-style: italic;
}
</style>
</head>
<body>
<div align="center">
<h1>Hello World</h1>
</div>
dewjnf
<p>This is my first page!</p>
</body>
</html>
问题是为什么有时候匹配=“/”其他匹配不起作用,有时是的?错误在哪里?
答案 0 :(得分:1)
为什么标题模板在第二个示例中不起作用?因为没有达到。您应该在<xsl:apply-templates/>
内执行<xsl:template match="/"/><html>...
- 它不会自行递归
答案 1 :(得分:0)
如果您想要添加更多匹配项,则需要添加
<xsl:apply-templates />
在templates
中。如果您不这样做,则不会考虑子节点。