如何在特定节点的XSLT中显示属性?

时间:2014-01-20 19:44:14

标签: xml xslt

我正在尝试使用XSLT样式表来设置XML数据的样式。我有两个团队在我的XML文件“V”和“H”中访问和回家。我想在两个单独的表中显示他们的统计数据。我只是不确定如何告诉XSLT我只想要特定团队的属性。我希望能够说xsl:value-of select =“team”其中vh属性=“V”拉出这些ID,名称,记录等的值 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 个答案:

答案 0 :(得分:1)

您正在寻找的XPath是/team[@vh="V]/team[@vh="H"]。 你可以在

中使用它
<xsl:value-of select="team[@vh='H']/@id"/>

XPath中的条件在方括号中给出。不幸的是我不知道你想在输出中使用它的位置,否则我会试着给你一个有效的例子。

一般情况下,我建议您使用额外的模板来实现目标:

<xsl:template match="team">
<table>
    <tr>
        <td>
            ID: <xsl:value-of select="@id"/>
       </td>
        <td>Score:    <xsl:value-of select="linescore/@score"/></td>     
        <td>Record:    <xsl:value-of select="@record"/></td>     
    </tr>   
</table>
</xsl:template>

然后,此模板可重复使用,例如像这样:

<xsl:apply-templates select="team[@vh='H']"/>
<xsl:apply-templates select="team[@vh='V']"/>

只需从<body>模板的bbgame标记中删除您的团队表,然后将其替换为一个或多个应用模板调用。