如果我们考虑使用html,我希望为内容数据管理2 div。1 is list data
和2 is for summary
。喜欢这张图片
在xsl
中,这是我的代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/hotels">
<html>
<body>
<h2>Transform 2</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Name</th>
<th>Type</th>
<th>Rating</th>
<th>Address</th>
</tr>
<xsl:apply-templates select="hotel[rating >= 4]"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="hotel">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="type"/></td>
<td><xsl:value-of select="rating"/></td>
<td><xsl:value-of select="address"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
我的XML
代码是
<hotels>
<hotel contact="(855) 23 430 732">
<name>hotel A</name>
<type>hotel</type>
<rating>5</rating>
<address>
<houseNo>73 </houseNo>
<street>Preah Monivong Blvd </street>
<Sangkat>Mean Chey</Sangkat >
<Khan>Daun Penh</Khan>
<city>Bangkok</city>
</address>
<room>
<roomType>hotel: standard/deluxe, apartment: studio/2-bedroom/3-bedroom</roomType>
<price>209</price>
<description>Descriptions</description>
</room>
<room>
<roomType>hotel: standard/deluxe, apartment: studio/2-bedroom/3-bedroom</roomType>
<price>210</price>
<description>Descriptions</description>
</room>
</hotel>
<hotel>
.....
</hotel>
我的问题:
如何为内容摘要数据编写second templates
。 (我制作布局很愚蠢。)
答案 0 :(得分:0)
您不一定需要第二个模板来进行摘要。您可以将所需代码放在与hotels
匹配的现有模板中。您可以使用count
和sum
函数来提供摘要。例如
<table>
<tr>
<td>Number of Standard Rooms</td>
<td><xsl:value-of select="count(hotel[rating >= 4]/room)"/></td>
</tr>
<tr>
<td>Average Cost of Standard Rooms</td>
<td><xsl:value-of select="sum(hotel[rating >= 4]/room/price) div count(hotel[rating >= 4]/room)"/></td>
</tr>
</table>
然而,看起来您想为“标准”和“豪华”房间提供单独的摘要,尽管您实际上并没有说过如何区分它们。假设有一种方法,您可以使用命名模板来避免代码重复:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/hotels">
<html>
<body>
<h2>Transform 2</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Name</th>
<th>Type</th>
<th>Rating</th>
<th>Address</th>
</tr>
<xsl:apply-templates select="hotel[rating >= 4]"/>
</table>
<table>
<xsl:call-template name="summary">
<xsl:with-param name="type">Deluxe</xsl:with-param>
<xsl:with-param name="rooms" select="hotel/room[starts-with(roomType, 'hotel: standard/deluxe,')]" />
</xsl:call-template>
<xsl:call-template name="summary">
<xsl:with-param name="type">Deluxe</xsl:with-param>
<xsl:with-param name="rooms" select="hotel/room[starts-with(roomType, 'hotel: standard,')]" />
</xsl:call-template>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="hotel">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="type"/></td>
<td><xsl:value-of select="rating"/></td>
<td><xsl:value-of select="address"/></td>
</tr>
</xsl:template>
<xsl:template name="summary">
<xsl:param name="type" />
<xsl:param name="rooms" />
<xsl:if test="$rooms">
<tr>
<td>Number of <xsl:value-of select="$type" /> Rooms</td>
<td><xsl:value-of select="count($rooms)"/></td>
</tr>
<tr>
<td>Average Cost of <xsl:value-of select="$type" /> Rooms</td>
<td><xsl:value-of select="sum($rooms/price) div count($rooms)"/></td>
</tr>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
我已经猜到了如何区分标准酒店和豪华酒店客房,但它应该证明原则。