我正在尝试使用XSLT样式表来设置XML数据的样式 . 我的XML文件中有两个团队"V"和"H"访问和回家 . 我想在两个单独的表中显示他们的统计数据 . 我希望能够说xsl:value-of select = "team"其中vh属性= "V"拉出ID,Name,Record等的这些值 .
XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<bbgame source="STAT CREW Basketball" version="4.15.03" generated="12/17/2013">
<team vh="V" id="MSU" name="MISSOURI STATE" record="8-2">
<linescore line="24,36" score="60">
<lineprd prd="1" score="24"></lineprd>
<lineprd prd="2" score="36"></lineprd>
</linescore>
</team>
<team vh="H" id="LOU" name="LOUISVILLE" record="10-1">
<linescore line="47,43" score="90">
<lineprd prd="1" score="47"></lineprd>
<lineprd prd="2" score="43"></lineprd>
</linescore>
</team>
</bbgame>
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="bbgame">
<html>
<head>
<link rel="stylesheet" type="text/css" href="stylesheet.css"/
</head>
<body>
<h1>Official Basketball Box Score -- Game Totals</h1>
<table>
<tr>
<td><xsl:value-of select="venue/@visname"/> vs. </td>
<td><xsl:value-of select="venue/@homename"/></td>
<td><xsl:value-of select="venue/@date"/></td>
<td><xsl:value-of select="venue/@time"/></td>
<td><xsl:value-of select="venue/@location"/></td>
</tr>
</table>
<table>
<tr>
<td>
<xsl:value-of select="team/@id"/></td>
<td> <xsl:value-of select="team/linescore/@score"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
编辑:
<table>
<xsl:if test="team[@vh="V"]">
<tr>
<td> <xsl:value-of select="team/@id"/></td>
<td> <xsl:value-of select="team/linescore/@score"/></td>
</tr>
</xsl:if>
</table>
1 回答
您正在寻找的XPath是
/team[@vh="V]
和/team[@vh="H"]
. 你可以使用它XPath中的条件在方括号中给出 . 不幸的是我不知道你想在输出中使用它的位置,否则我会试着给你一个有效的例子 .
一般来说,我建议使用额外的模板来实现你想要的目标:
然后,该模板可重复使用,例如像这样:
只需从
bbgame
模板的<body>
标记中删除您的团队表,并将其替换为一个或多个apply-template调用 .