die Anzahl der vorkommen eines Strings in XML mit Hilfe von XSLT
Möchte ich calcutae die Anzahl von vorkommen einer Zeichenfolge in einem bestimmten Knoten im XML-Dokument mithilfe von XSLT.
Betrachten Sie dieses Beispiel
<mainNode>
<book>
<price> 100 </price>
<city> chennai </city>
<list>
<language> c java ruby </language>
</list>
</book>
<book>
<price> 200 </price>
<city> banglore </city>
<list>
<language> c java </language>
</list>
</book>
<book>
<price> 300 </price>
<city> delhi </city>
<list>
<language> java ruby </language>
</list>
</book>
</mainNode>
Hier möchte ich zum zählen der vorkommen von "java"
Möchte ich eine Ausgabe wie diese:: java -- 3
Wie mache ich das??? keine Ahnung???
Gute Frage, +1. Siehe meine Antwort für eine komplette, kurze und einfache one-liner XPath-Ausdruck Lösung. 🙂
Kleiner Punkt, aber XML ist irgendwie schlecht geplant. Man sollte wirklich eine Liste der
Auch haben Sie nicht aufgeführt, es in ein Beispiel, aber es könnte
Kleiner Punkt, aber XML ist irgendwie schlecht geplant. Man sollte wirklich eine Liste der
<language>
Elemente, wie diese: <list><language>java</language><language>ruby</language></list>
werden, anstatt in eine durch Leerzeichen getrennte Liste in ein einzelnes element; es hätte dies trivial zu beantworten, mit count(//language[.='java'])
.Auch haben Sie nicht aufgeführt, es in ein Beispiel, aber es könnte
javascript
erscheinen in der Liste der Sprachen?InformationsquelleAutor Sathish | 2011-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden:
Das komplette XSLT-transformation:
, wenn angewandt auf das XML-Dokument:
die wollten, das richtige Ergebnis produziert wird:
Update:
Wenn wir zählen alle vorkommen der Zeichenfolge -- nicht nur alle Knoten, die die Zeichenfolge enthalten-hier ist, wie es zu tun:
wenn diese transformation, angewandt auf das XML-Dokument:
die wollten, das richtige Ergebnis produziert wird:
Dieser code ist die Arbeit gut. Angenommen, der Knoten Sprache enthält mehr als ein java-wie, <language> java-java-ruby <language>. Jetzt sollte die Zählung um 1 erhöht, aber Sie zeigen immer noch 3. Wie man 4?
Das ist eine ganz andere Frage. Am besten wäre es, toas dies als eine separate Frage. Es ist kurz vor Mitternacht, wo ich bin, also, bitte, erwarten Sie meine Antwort über 8 Stunden ab jetzt.
Dimitre Novatchev: ok Mann keine probs, pls das für mich tun, ich habe versucht, so viele Male. Ich coudnt bekommen. Dieses Szenario ist für mich sehr wichtig, so versuchen Sie bitte diese....
Es ist eine ganz andere Antwort, nicht eine andere Frage. Die Frage und der Titel beziehen sich auf das zählen der Anzahl von vorkommen einer Zeichenfolge, nicht die Anzahl der Knoten, die eine Zeichenfolge enthalten.
InformationsquelleAutor Dimitre Novatchev
vielleicht können Sie versuchen, diese XSL-Template zu zählen Teilstrings:
Verwendung:
InformationsquelleAutor pageman
Versuchen, diese in eine
<xsl:value-of>
Aussage:count(//language[contains(concat(' ',.,' '), ' java ')])
Wenn Ihr Dokument-Struktur ist relativ statisch, oder Sie haben Knoten genannt
language
anderswo, die anderen Zwecken dienen, Sie ersetzen können//language
für/mainNode/book/list/language
.Den
concat
bit mag ein wenig kompliziert, aber, indem Sie sicher, dass es ein Leerzeichen am Anfang und Ende des Textes, den Sie suchen, und die Suche nach' java '
mit einem Leerzeichen entweder Seite, werden Sie nicht falsch umfassen andere Bedingungen, die passieren, zu zählenjava
wiejavascript
.Wenn es möglich ist, mit 'java' zu existieren, mehr als einmal in einem Knoten, dann müssen Sie eine rekursive template. Hier ist eine Möglichkeit:
Dies ist im wesentlichen erstellt eine Zeichenfolge von
0
's, eine für jedes vorkommen vonjava
, und dann nutzt einfach die Länge des Strings.Wenn Sie die option XSLT 2.0, können Sie eine Funktion erstellen, die zählt die Anzahl der vorkommen in einem string, und verwenden Sie
<xsl:value-of select="sum(mycountfunction(//language))" />
oder etwas ähnliches.Als ich wies in einem Kommentar auf Ihre Frage, einer besseren Gestaltung der Quell-XML-hätte erheblich dazu beigetragen; nichts davon ist nötig, wenn jedes vorkommen einer Sprache hatte, es ist ein eigenes element. Natürlich, die außerhalb Ihrer Kontrolle, aber wenn Sie die Möglichkeit haben, dies zu ändern (oder überreden den Anbieter zu ändern) würde ich dringend empfehlen es.
Flynn1179::: In der oben genannten Funktion, die Sie haben bestanden "java" als argument. Anstelle von "java" kann ich pass leere Zeichenfolge wie " "? Gewusst wie: übergeben Sie einen leeren string oder char " "?
Sie können, aber was wäre der Punkt, dass? Ein leerer string übergeben wird wahrscheinlich recurse unendlich und übergeben den Raum geben Ihnen völlig sinnlose Ergebnisse gegeben, dass Sie mit einem Leerzeichen als Trennzeichen.
InformationsquelleAutor Flynn1179
http://www.xsltfunctions.com/xsl/functx_number-of-matches.html
Habe ich beantwortet, ebenso hier: Finden Sie die Anzahl der vorkommen eines Teilstrings in einem string in xslt
InformationsquelleAutor SketchBookGames