2012-08-15 26 views
16

widziałem tej składni kilka miejsc (np here):xmllint nieznana opcja „--xpath”

xmllint --xpath '/plist/array/string/text()' tmp.xml, używane do kwerendy konkretny węzeł XML przy użyciu wybieraka xpath. Jednak otrzymuję komunikat o błędzie Unknown option --xpath podczas próby wykonania tego na moim komputerze (mac os x snow leopard).

Przyglądając się bliżej na stronie man xmllint, nie widzę opcji --xpath udokumentowane ...

jestem po prostu całkowicie brakuje czegoś tutaj?

+1

ja również nie może znaleźć opcję '--xpath' (na moim Linux-ie), ale w moim przypadku 'xmllint' wie o tej opcji:' xmllint | grep xpath' return '--xpath expr: oblicz wyrażenie XPath, inply --noout'. Pokaż nam wynik polecenia 'xmllint --version'. Może ten program powinien być skompilowany z/bez wsparcia XPath? .. –

+0

Zobacz @ steve.sims odpowiedź na [to pytanie] (http://stackoverflow.com/questions/11611385/get-value-from-an- attribute- using-xmllint) do używania starszych wersji xmllint, które nie obsługują argumentu --xpath. – mmigdol

Odpowiedz

4

Ach, tak, musiał być problem z nieaktualną wersją libxml2.

Aktualizacja za pomocą macports prawdopodobnie zmieniła się na libxml2 (na v2.7.8).

+6

Jak zaktualizować wersję libxml do obsługi opcji --xpath –

1

Jeśli chcesz manipulować plikami plist z wiersza poleceń na komputerze Mac, użyj PlistBuddy.

Na przykład, można zrobić tego typu rzeczy w skrypcie powłoki:

BUNDLE_ID=`/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' Info.plist` 
echo $BUNDLE_ID 

Jest bardzo silny, można dodawać/usuwać elementy w macierzy i słowników, spojrzeć w górę wartości zabezpieczone kluczem lub indeksowanych, kopiowanie/scalanie/importowanie innych plików itp. Aby uzyskać pełne informacje, patrz: /usr/libexec/PlistBuddy -h.

5

Dla niektórych osób aktualizacja nie jest opcją. Musisz pracować z podaną wersją, która jest instalowana przez inny zespół i idziesz z nią.

Można spróbować przez --shell:

xmllint --shell tmp.xml << EOF 
'/plist/array/string/text()' 
EOF 
+1

Thankyou @Trompa, to pokazało, że jest to możliwe ze starym xmllint; Użyłem polecenia xmllint --shell "cat", aby wyodrębnić port HTTP odbiornika tomcat w 1-wierszu: 'echo" cat //Connector[@protocol='org.apache.coyote.http11.Http11NioProtocol']/@ port "| xmllint --shell /apache-tomcat/conf/server.xml | awk -F \ "'/ =/{print $ 2;}'' –

5
xmllint --shell tmp.xml <<<'xpath /plist/array/string/text()' 

Jeśli trzeba dokonać xmllint czytać stdin:

cat /tmp/tmp.xml | xmllint --shell <(cat) <<<'xpath /plist/array/string/text()' 
Powiązane problemy