Создайте список отдельных элементов XML и сосчитайте их xpath v1.0 - PullRequest
0 голосов
/ 16 мая 2018

Я использую xslt xpath v1.0 и следующий xml:

<store>
<item>
    <title>tshirt</titlet>
</item>
<item>
    <title>shoes</titlet>
</item>
<item>
    <title>boots</titlet>
</item>
<item>
    <title>boots</titlet>
</item>
<item>
    <title>shoes</titlet>
</item>
<item>
    <title>boots</titlet>
</item>
</store>

Выходными данными должен быть список в порядке убывания, например:

имя элемента (всего элемента вxml)

ботинки (3)

ботинки (2)

футболка (1)

Я нашел способ идентифицировать их, но не могу найтиспособ поставить счет

<xsl:for-each select="item[not(preceding::item/. = .)]">
            <xsl:value-of select="." />
</xsl:for-each>

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Вы можете использовать это:

  <xsl:variable name="FullXml" select="/store"/>
  <xsl:for-each select="distinct-values(/store/item/title/text())">
      <xsl:variable name="TheContent" select="." />
      <xsl:value-of select="$TheContent"/>(<xsl:value-of select="count($FullXml/item[title/text()=$TheContent])" />)
  </xsl:for-each>

С помощью distinct-values() вы получите список всех значений, а с помощью .count() вы можете найти их число.

0 голосов
/ 16 мая 2018

С чистым XPath 1 это сложно, но, так как вы все равно используете XSLT, вы можете использовать Muenchian grouping для группировки и xsl:sort для сортировки:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:output method="html" indent="yes" version="5" doctype-system="about:legacy-doctype"/>

  <xsl:key name="group" match="item" use="title"/>

  <xsl:template match="/">
    <html>
      <head>
        <title>.NET XSLT Fiddle Example</title>
      </head>
      <body>
          <ul>
              <xsl:apply-templates select="store/item[generate-id() = generate-id(key('group', title)[1])]">
                  <xsl:sort select="count(key('group', title))" order="descending" data-type="number"/>
              </xsl:apply-templates>
          </ul>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="item">
      <li>
          <xsl:value-of select="concat(title, ' (', count(key('group', title)), ')')"/>
      </li>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty -development.net / nc4NzQb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...