我有以下XML
代码(test.xml):
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>http://www.url.com/1/</url>
<url>http://www.url.com/2/</url>
<url>http://www.url.com/3/</url>
</urlset>
然后,我想用以下XSL
代码(test.xsl)给它一些风格:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>
<body>
<xsl:for-each select="/urlset/url">
<div>
one address here (no matter which)
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
由于某种原因,没有结果,只有blank page
。
我刚刚按照几年前试过的示例代码对我有用,但这不起作用。
关于如何解决这个问题的任何想法?
答案 0 :(得分:2)
我刚刚按照几年前尝试的示例代码为我工作
几年前代码工作可能是因为那时你的输入文档没有命名空间。
现在,您的输入文档有一个默认命名空间,您需要在XSLT样式表中进行说明。如果您在样式表中重新声明此命名空间,并且前缀来自输入文档的所有元素名称,则样式表可用。
我猜你可能想要以下样式表,它输出所有url
元素的内容:
XSLT样式表
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:stmp="http://www.sitemaps.org/schemas/sitemap/0.9">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>
<body>
<xsl:for-each select="/stmp:urlset/stmp:url">
<div>
<xsl:value-of select="."/>
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XHTML输出
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:stmp="http://www.sitemaps.org/schemas/sitemap/0.9">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Test</title>
</head>
<body>
<div>http://www.url.com/1/</div>
<div>http://www.url.com/2/</div>
<div>http://www.url.com/3/</div>
</body>
</html>
但是你的XSLT编程风格也可以改进。使用xsl:for-each
代替不必要的xsl:apply-templates
,并为url
元素编写单独的模板。
XSLT样式表(已改进)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:stmp="http://www.sitemaps.org/schemas/sitemap/0.9">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="stmp:url">
<div xmlns="http://www.w3.org/1999/xhtml">
<xsl:value-of select="."/>
</div>
</xsl:template>
</xsl:stylesheet>
输出结果相同。在线here自行试用。
答案 1 :(得分:-1)
这是您尝试完成的一种简单方法:
您的XML
代码:
<?xml version="1.0" encoding="UTF-8"?>
<urlset>
<url>http://www.url.com/1/</url>
</urlset>
您的XSLT
代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="urlset/url"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>