xslt counting different content of the same conten

2019-05-14 04:07发布

just started studying xslt.just want to know how would count the number of international based players? Another thing is the average height of he international players?

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="soccer.xslt"?>

    <footballclub>
        <player>
            <based>international</based>
            <height>5.5</height >
            <build>medium</build>
            <age>24</age>
        </player>
        <player>
            <based>local</based>
            <height>5.5</height >
            <build>medium</build>
            <age>24</age>
        </player>
        <player>
            <based>international</based>
            <height>5.5</height >
            <build>medium</build>
            <age>24</age>
        </player>
        <player>
            <based>local</based>
            <height>5.5</height >
            <build>medium</build>
            <age>24</age>
        </player>
    </footballclub>

have tried the following;

count(//football/player/based[not(following::based='international')]) xslt:

<?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" version="4.0" />

<xsl:template match="/">
 <html>
 <head >
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<title>bombers FC</title>
</head>
<body>
NUMBER OF INTERNATIONAL PLAYERS IS:<xsl:value-of select="count(//football/player/based[not(following::based='international')])"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

the results should read : NUMBER OF INTERNATIONAL PLAYERS IS: 2

标签: xslt xslt-1.0
1条回答
祖国的老花朵
2楼-- · 2019-05-14 04:25

Your XPath needs to change a little...

XML Input (corrected to be well formed)

<footballclub>
    <player>
        <based>international</based>
        <height>5.5</height>
        <build>medium</build>
        <age>24</age>
    </player>
    <player>
        <based>local</based>
        <height>5.5</height>
        <build>medium</build>
        <age>24</age>
    </player>
    <player>
        <based>international</based>
        <height>5.5</height>
        <build>medium</build>
        <age>24</age>
    </player>
    <player>
        <based>local</based>
        <height>5.5</height>
        <build>medium</build>
        <age>24</age>
    </player>
</footballclub>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="4.0"/>

    <xsl:template match="/">
        <html>
            <head>
                <title>bombers FC</title>
            </head>
            <body>
                <p>
                    <xsl:text>NUMBER OF INTERNATIONAL PLAYERS IS: </xsl:text>
                    <xsl:value-of select="count(footballclub/player[based='international'])"/>
                </p>
                <p>
                    <xsl:text>AVERAGE HEIGHT OF INTERNATIONAL PLAYERS IS: </xsl:text>
                    <xsl:value-of select="sum(footballclub/player[based='international']/height) div count(footballclub/player[based='international'])"/>
                </p>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Output

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

      <title>bombers FC</title>
   </head>
   <body>
      <p>NUMBER OF INTERNATIONAL PLAYERS IS: 2</p>
      <p>AVERAGE HEIGHT OF INTERNATIONAL PLAYERS IS: 5.375</p>
   </body>
</html>
查看更多
登录 后发表回答