2015-09-30 3 views
1

Использование xmlstarlet/xpath, как мне получить имя всех дочерних элементов определенного узла? Например, я хочу, чтобы получить все имена дочернего элемента /aПолучение всех дочерних имен с помощью xmlstarlet/xpath

<a> 
    <b><c/></b> 
    <d/> 
</a> 

Если вернуться:

b 
d 

Я попытался

xmlstarlet sel -t -c 'name(/a/*)' - 

, но это только дает мне b

ответ

3

Я не думаю, что выражение XPath 1.0 может это сделать, вам либо нужен XPath 2 .0 /a/*/name() (что я не думаю, что поддерживает xmlstarlet), или вам нужно использовать XSLT или попытаться использовать параметры командной строки xmlstarlet, чтобы попытаться имитировать XSLT. У меня нет доступа к этому инструменту, и я не знаком с деталями, согласно http://xmlstar.sourceforge.net/doc/xmlstarlet.txt вы можете попробовать

xmlstarlet sel -t -m "https://stackoverflow.com/a/*" -v "name()" 

непроверенными.

+0

Да, это хорошо работает! Если я добавляю флаг -n, я даже получаю разрывы строк: 'xmlstarlet sel -t -m"/a/* "-n -v" name() "' – matthiash

Смежные вопросы