如何计算每个用户的评论和评估数量? XSLT(user = utilizador)

时间:2017-12-31 01:30:03

标签: xml xslt dtd

我有这个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? .................................................. .................................................. ...............................................

1 个答案:

答案 0 :(得分:0)

此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</...>来更明确。