如何使用 for-each 计算每个用户的评论和评价数量? XSLT(用户 = 实用程序)
How do I count the number of comments and avaluations for each user with for-each? XSLT (user = utilizador)
我有这个xml:
<Loja>
<utilizadores>
<utilizador user_id="_28565748">
<username name="catarmoa99"/>
</utilizador>
<utilizador user_id="_29478382">
<username name="margaridaaat"/>
</utilizador>
<utilizador user_id="_22478383">
<username name="diogomiguel85"/>
</utilizador>
<utilizador user_id="_293665789">
<username name=" davrodrigues"/>
</utilizador>
</utilizadores>
<vendedores>
...
</vendedores>
<produtos>
<produto product_id="_12578987" vendedor_produto="_28565748">
<nome>Computador HP_54000j</nome>
<comentários>
<comentário id="_c01" data="" utilizador="_29478382" avaliação="5">O serviço foi eficaz, cumprindo os prazos.</comentário>
<comentário id="_c03" data="" utilizador="_29478382" parent="_c01">Chegando em muito boas condições.</comentário>
<comentário id="_c02" data="" utilizador="_29478382" avaliação="5">Muito bom produto.</comentário>
<comentário id="_c04" data="" utilizador="_29478382" avaliação="5">Fantástico serviço!</comentário>
<comentário id="_c05" data="" utilizador="_29478382" avaliação="5">Vou comprar mais!</comentário>
</comentários>
</produto>
</Loja>
我有这些 xslt,输出是 xhtml:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--<link rel="stylesheet" type="text/css" href="starter-template.css"/>-->
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" type="text/css" href="bootstrap.min.users.css"/>
<link rel="stylesheet" type="text/css" href="starter-template-users.css" />
</head>
<body>
<h1 align="center" class="my-4">Users</h1>
<xsl:for-each select="Loja/utilizadores/utilizador">
<div class="container">
<div class="row">
<div class="col-md-8">
<div class="card mb-4">
<img class="card-img-top" src="foto user_id = _28565748.jpg" alt="Card image cap"/>
<div class="card-body">
<h2 class="card-title"><xsl:value-of select="nome"/></h2>
<p class="card-text"><b>ID: </b><xsl:value-of select="@user_id"/></p>
<p class="card-text"><b>Username: </b><xsl:value-of select="username/@name"/></p>
<p class="card-text"><b>Telephone: </b><xsl:value-of select="telefone"/></p>
<p class="card-text"><b>Comments: </b><xsl:value-of select="count(//comentário)"/></p>
<p class="card-text"><b>Avaluations: </b><xsl:value-of select="count(//comentário/@avaliação[/../@utilizador =//utilizador/@user_id])"/></p>
</div>
</div>
</div>
</div>
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我的问题是...我想知道每个用户的评论数。我如何使用 for-each 做到这一点?
..................................................... ..................................................... ...................................
此 XSLT-1.0 解决方案使用三个模板实现此目的:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/AMAZINGSTORE">
<sellers>
<xsl:apply-templates select="seller"/>
</sellers>
</xsl:template>
<xsl:template match="seller">
<xsl:element name="seller">
<xsl:attribute name="name"><xsl:value-of select="@username" /></xsl:attribute>
<xsl:apply-templates select="product"/>
</xsl:element>
</xsl:template>
<xsl:template match="product">
<xsl:element name="product">
<xsl:value-of select="name"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出:
<!DOCTYPE AMAZINGSTORE SYSTEM "StoreInfo.dtd">
<?xml version="1.0" encoding="UTF-8"?>
<sellers>
<seller name="migueltavares">
<product>Origem</product>
<product>Lincoln No Bardo</product>
</seller>
<seller name="tosilva">
<product>A Estranha Ordem Das Coisas</product>
</seller>
<seller name="artursoares73"/>
</sellers>
P.S.: 为了更明确,我确实使用了 <xsl:element name="...">
而不是 <...>content</...>
。
我有这个xml:
<Loja>
<utilizadores>
<utilizador user_id="_28565748">
<username name="catarmoa99"/>
</utilizador>
<utilizador user_id="_29478382">
<username name="margaridaaat"/>
</utilizador>
<utilizador user_id="_22478383">
<username name="diogomiguel85"/>
</utilizador>
<utilizador user_id="_293665789">
<username name=" davrodrigues"/>
</utilizador>
</utilizadores>
<vendedores>
...
</vendedores>
<produtos>
<produto product_id="_12578987" vendedor_produto="_28565748">
<nome>Computador HP_54000j</nome>
<comentários>
<comentário id="_c01" data="" utilizador="_29478382" avaliação="5">O serviço foi eficaz, cumprindo os prazos.</comentário>
<comentário id="_c03" data="" utilizador="_29478382" parent="_c01">Chegando em muito boas condições.</comentário>
<comentário id="_c02" data="" utilizador="_29478382" avaliação="5">Muito bom produto.</comentário>
<comentário id="_c04" data="" utilizador="_29478382" avaliação="5">Fantástico serviço!</comentário>
<comentário id="_c05" data="" utilizador="_29478382" avaliação="5">Vou comprar mais!</comentário>
</comentários>
</produto>
</Loja>
我有这些 xslt,输出是 xhtml:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--<link rel="stylesheet" type="text/css" href="starter-template.css"/>-->
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" type="text/css" href="bootstrap.min.users.css"/>
<link rel="stylesheet" type="text/css" href="starter-template-users.css" />
</head>
<body>
<h1 align="center" class="my-4">Users</h1>
<xsl:for-each select="Loja/utilizadores/utilizador">
<div class="container">
<div class="row">
<div class="col-md-8">
<div class="card mb-4">
<img class="card-img-top" src="foto user_id = _28565748.jpg" alt="Card image cap"/>
<div class="card-body">
<h2 class="card-title"><xsl:value-of select="nome"/></h2>
<p class="card-text"><b>ID: </b><xsl:value-of select="@user_id"/></p>
<p class="card-text"><b>Username: </b><xsl:value-of select="username/@name"/></p>
<p class="card-text"><b>Telephone: </b><xsl:value-of select="telefone"/></p>
<p class="card-text"><b>Comments: </b><xsl:value-of select="count(//comentário)"/></p>
<p class="card-text"><b>Avaluations: </b><xsl:value-of select="count(//comentário/@avaliação[/../@utilizador =//utilizador/@user_id])"/></p>
</div>
</div>
</div>
</div>
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我的问题是...我想知道每个用户的评论数。我如何使用 for-each 做到这一点? ..................................................... ..................................................... ...................................
此 XSLT-1.0 解决方案使用三个模板实现此目的:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/AMAZINGSTORE">
<sellers>
<xsl:apply-templates select="seller"/>
</sellers>
</xsl:template>
<xsl:template match="seller">
<xsl:element name="seller">
<xsl:attribute name="name"><xsl:value-of select="@username" /></xsl:attribute>
<xsl:apply-templates select="product"/>
</xsl:element>
</xsl:template>
<xsl:template match="product">
<xsl:element name="product">
<xsl:value-of select="name"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出:
<!DOCTYPE AMAZINGSTORE SYSTEM "StoreInfo.dtd">
<?xml version="1.0" encoding="UTF-8"?>
<sellers>
<seller name="migueltavares">
<product>Origem</product>
<product>Lincoln No Bardo</product>
</seller>
<seller name="tosilva">
<product>A Estranha Ordem Das Coisas</product>
</seller>
<seller name="artursoares73"/>
</sellers>
P.S.: 为了更明确,我确实使用了 <xsl:element name="...">
而不是 <...>content</...>
。