Gern stehe ich zur fachlichen Unterstützung in XML-Technologien, C#.NET, VisualBasic.NET und Java zur Verfügung. Sprechen Sie mich einfach an: Mail oder ☎ 0151 . 750 360 61


XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Funktionen / XPath: Sequenz-Funktionen / XPath: count()

XPath: count()

XPath: count()

➪ Die count-Funktion zählt die Anzahl der Items in der Sequenz. Sie steht auch unter XPath 1.0 zur Verfügung.

Auf dieser Seite:

Nehmen Sie eine Sequenz von Items, die sich aus einem XML-Dokument auswerten und durch das XPath-Statement "//Mensch" ansprechen lässt. Dann ergibt ...


<xsl:template match="/">
    <ergebnis>
        <xsl:value-of select="count(//Mensch)"/>
    </ergebnis>
</xsl:template>

je nach dem XML-Dokument das Resultat:


<ergebnis>19</ergebnis>

Ab bzw. können Sie der count-Funktion auch eine selbst definierte Sequenz mitgeben.


<ergebnis>
    <xsl:value-of 
         select="count(
             (7*25.99, 199, 1, (11 to 50)[. mod 9=1])
         )"/>
</ergebnis>

Diese selbst definierte Sequenz besteht dann aus den intern berechneten Werten (181.93, 199, 1, 19, 28, 37, 46), das Resultat lautet:


<ergebnis>7</ergebnis>

Stringanalyse mit count(tokenize)

In Verbindung mit count kann auch dazu verwendet werden, die Anzahl bestimmter Zeichenfolgen in einem String zu bestimmen.


<xsl:stylesheet version="2.0" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="xs" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <xsl:variable name="v" 
         as="xs:string">abc/XYZ/def/XYZ;XYZ|XYZ/ghi;XYZ</xsl:variable>
    <ergebnis>
      <xsl:for-each select="tokenize($v, 'XYZ')">
        <item>
          <xsl:value-of select="."/>
        </item>
      </xsl:for-each>
      <count>
        <xsl:value-of select="count(tokenize(string($v), 'XYZ'))"/>
      </count>
    </ergebnis>
  </xsl:template>
</xsl:stylesheet>

In XQuery können Sie die Logik so implementieren:


<ergebnis>{
    let $v as xs:string := 'abc/XYZ/def/XYZ;XYZ|XYZ/ghi;XYZ'
    let $tw := tokenize($v, 'XYZ')
    return
    (
        for $w in $tw return <item>{$w}</item>,
        element {'count'}{count($tw)}
    )    
}</ergebnis>

In der dargestellten Variable "$v" ist die Zeichenkette "XYZ" fünf Mal enthalten. Da tokenize einen String in eine Sequenz von Items konvertiert, liefert count(tokenize) einen Wert, der um "1" höher ist als die tatsächliche Anzahl:


<ergebnis>
   <item>abc/</item>
   <item>/def/</item>
   <item>;</item>
   <item>|</item>
   <item>/ghi;</item>
   <item/>
   <count>6</count>
</ergebnis>

wg / 15. März 2019



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/count.html