Ich verwende die interaktive Shell von xmllint unter Cygwin. Ich möchte die Anzahl der Knoten zählen, aber xmllint verhält sich anscheinend nicht wie erwartet:
$> cat test.xml
<?xml version="1.0"?>
<result>
<node>
<item/>
<item/>
<item/>
<item/>
<item/>
</node>
</result>
$> xmllint --shell test.xml
/ > cat count(/result/node/item)
count(/result/node/item) is a number
Es heißt, es handele sich um eine Nummer, aber die Nummer wird nicht auf die Art und Weise angezeigt, die ich bei Websuchen gesehen habe:
count(/result/node/item) is a number : 5
Was läuft hier schief?
$> xmllint --version
xmllint: using libxml version 20706
compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib
Antwort1
Mir ist klar, dass @Stephane dies in den Kommentaren erwähnt hat, aber ich bin auf diese Technik gestoßen und wollte diese Antwort posten, bevor ich seinen Kommentar mit derselben Lösung sah. Ich bin mir nicht sicher, was die Etikette dafür ist, aber hier ist, was ich gefunden habe. LMK und ich kann diese Antwort löschen, wenn es unangemessen ist, eine Antwort auf den Kommentar einer anderen Person zu posten.
Lösung
Sie müssen den Befehl innerhalb von xmllint verwenden, um das von der Funktion xpath
zurückgegebene Ergebnis anzuzeigen .count
$ xmllint --shell test.xml
/ > cat
<?xml version="1.0"?>
<result>
<node>
<item/>
<item/>
<item/>
<item/>
<item/>
</node>
</result>
/ > xpath count(/result/node/item)
Object is a number : 5
/ >
Die Antwort habe ich hier auf dieser Site gefunden:Spielen mit XPath-Ausdrücken in der xmllint-Shell.