我在使用xsl在html表中显示xml时遇到问题。 1. html视图重复下面的xsl和 2.无法区分具有相同名称的子元素(例如:以下xml中的名称标签)。 xml在不同节点中具有不同类型的信息,如下所示。
<employee>
<address>
<street>street1</street>
<city>city1</city>
<pincode>123456</pincode>
</address>
<personalinfo>
<name>testname1</name>
<phone>999999999</phone>
<dob>23-09-34</dob>
</personalinfo>
<remarks>
<education>
<name>testname2</name>
<college>college1</college>
<gpa>7.5</gpa>
</education>
</remarks>
</employee>
这是我的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="employee">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="address|personalinfo|remarks">
<table width="630">
<tr>
<td>Name</td>
<td>College</td>
<td>City</td>
</tr>
<tr>
<td><xsl:value-of select="//name"/></td>
<td><xsl:value-of select="//college"/></td>
<td><xsl:value-of select="//city"/></td>
</tr>
</table>
<span><br/>
</span>
</xsl:template>
</xsl:stylesheet>
请在这方面帮助我。谢谢。
答案 0 :(得分:0)
从表结构来看,您希望将表头移动到与根节点匹配的模板,然后使用 relative (和显式)路径获取每个员工的相应详细信息:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">
<html>
<body>
<table>
<tr>
<th>Name</th>
<th>College</th>
<th>City</th>
</tr>
<xsl:apply-templates/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="employee">
<tr>
<td>
<xsl:value-of select="personalinfo/name"/>
</td>
<td>
<xsl:value-of select="remarks/education/college"/>
</td>
<td>
<xsl:value-of select="address/city"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
表达式//name
选择文档中任何位置的所有名称元素。这不是你想要的:你想要当前处理的personalInfo
或remarks
中的name元素:对于直接孩子来说是select="name"
,对于后代来说是select=".//name"
任何深度。
使用相同的模板规则处理具有非常不同结构的三个元素(address|personalinfo|remarks
)似乎很奇怪。