Я использую интерактивную оболочку xmllint на cygwin. Я хотел бы посчитать количество узлов, но 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 упомянул об этом в комментариях, но я наткнулся на эту технику и собирался опубликовать этот ответ до того, как увидел его комментарий с тем же решением. Не уверен в этикете для этого, но вот что я нашел. LMK и я можем удалить этот ответ, если неуместно публиковать ответ на чужой комментарий.
Решение
Вам необходимо использовать 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
/ >
Ответ нашел здесь, на этом сайте:Игра с выражениями XPath в оболочке xmllint.