需要从xml中的每组标签中提取数据。现在我只获取每一行的第一组数据。这是我从
中提取数据的XML <message>
<Data>
<Name>John Doe</Name>
<Date>2/14/2012</Date>
<Phone>1234567</Phone>
</Data>
<Data>
<Name>Jane Doe</Name>
<Date>4/19/2012</Date>
<Phone>2345678</Phone>
</Data>
<Data>
<Name>Mike Doe</Name>
<Date>12/14/2011</Date>
<Phone>3456789</Phone>
</Data>
</message>
我正在使用的XSLT就是这个。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="html" version="1.1" encoding="iso-8859-1" />
<xsl:template match="/message">
<html>
<body>
<table border="1">
<tr>
<th ColSpan="4">Person</th>
</tr>
<tr>
<th>Name</th>
<th>Date</th>
<th>Phone</th>
</tr>
<xsl:for-each select="//Data">
<tr>
<td>
<xsl:value-of select="//Name" />
</td>
<td>
<xsl:value-of select="//Date" />
</td>
<td>
<xsl:value-of select="//Phone" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我的输出仅显示John Doe关于所有三行的信息。
答案 0 :(得分:1)
<tr>
<td>
<xsl:value-of select="//Name" />
</td>
<td>
<xsl:value-of select="//Date" />
</td>
<td>
<xsl:value-of select="//Phone" />
</td>
</tr>
你的问题在于此。您已选择所有数据标记并正在迭代它们,但是当您获得该值时,您将获取文档中的所有名称,日期或电话标记,然后获取第一个的值,是John Doe的。
<tr>
<td>
<xsl:value-of select="Name" />
</td>
<td>
<xsl:value-of select="Date" />
</td>
<td>
<xsl:value-of select="Phone" />
</td>
</tr>
因为在for-each中,您处于Data标记的范围内,所以您只需使用该名称来选择子节点。
为了XSLT中的样式,我还建议将for-each分成模板。所以,你的最终转换看起来像这样:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="html" version="1.1" encoding="iso-8859-1" />
<xsl:template match="/message">
<html>
<body>
<table border="1">
<tr>
<th ColSpan="4">Person</th>
</tr>
<tr>
<th>Name</th>
<th>Date</th>
<th>Phone</th>
</tr>
<xsl:apply-templates select="Data"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="Data">
<tr>
<td>
<xsl:value-of select="Name" />
</td>
<td>
<xsl:value-of select="Date" />
</td>
<td>
<xsl:value-of select="Phone" />
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
尝试删除所有//
...
<xsl:for-each select="Data">
<tr>
<td>
<xsl:value-of select="Name" />
</td>
<td>
<xsl:value-of select="Date" />
</td>
<td>
<xsl:value-of select="Phone" />
</td>
</tr>
</xsl:for-each>