私は cygwin で xmllint のインタラクティブ シェルを使用しています。ノードの数を数えたいのですが、xmllint が期待どおりに動作しないようです。
$> 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
数字だと言われていますが、ウェブ検索で見たような形で数字は表示されません。
count(/result/node/item) is a number : 5
ここで何が間違っているのでしょうか?
$> 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
答え1
@Stephane がコメントでこれについて言及していたことは承知していますが、私はこのテクニックに遭遇し、同じ解決策に関する彼のコメントを見る前にこの回答を投稿するつもりでした。これのエチケットはよくわかりませんが、私が見つけたのは次のとおりです。 他の人のコメントに回答を投稿することが不適切である場合は、お知らせください。この回答を削除できます。
解決
xpath
関数から返される結果を表示するには、xmllint 内でコマンドを使用する必要があります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
/ >
このサイトで答えを見つけました:xmllint シェルで XPath 式を操作する。