我有一个XML文件过滤XML使用XSLT不工作
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="main.xsl"?>
<document>
<parents>
<parent>
<name>Jordan</name>
<age>25</age>
<childs>
<child eyes="black">
<name>Ema</name>
</child>
<child eyes="blue">
<name>Kaloyan</name>
</child>
</childs>
</parent>
</parents>
</document>
,我想使用XSL文件main.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:include href="child.xsl" />
<xsl:template match="/">
<html>
<head>
<title>Head first</title>
</head>
<body>
<table border="1">
<xsl:for-each select="document/parents/parent">
<tr>
<td>
<xsl:text disable-output-escaping="yes">Name</xsl:text>
</td>
<td>
<xsl:value-of select="name"></xsl:value-of>
</td>
</tr>
<tr>
<td>
<xsl:text disable-output-escaping="yes">Age</xsl:text>
</td>
<td>
<xsl:value-of select="age"></xsl:value-of>
</td>
</tr>
<xsl:for-each select="childs/child">
<xsl:variable name="obj" select="."></xsl:variable>
<xsl:apply-templates select="//child[@eyes = 'black']" mode="child">
<xsl:with-param name="obj" select="$obj"></xsl:with-param>
</xsl:apply-templates>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
指向child.xsl文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="child">
<xsl:param name="obj"></xsl:param>
<h3><xsl:text disable-output-escaping="yes">Child name</xsl:text> </h3>
<h4><xsl:value-of select="$obj/name"></xsl:value-of></h4>
</xsl:template>
</xsl:stylesheet>
所需的结果是只看到一个孩子的名字是Ema但我看到Ema两次:
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>Head first</title>
</head>
<body>
<table border="1">
<tbody>
<tr>
<td>Name</td>
<td>Jordan</td>
</tr>
<tr>
<td>Age</td>
<td>25</td>
</tr>
Ema Ema
</tbody>
</table>
</body>
</html>
有谁知道为什么会发生这种情况?
为什么你禁用输出转义为简单的字符串,如“名称”或“年龄”,不需要转义? –
没有像这样写的目的。这是真实脚本问题的一个例子。 –