web-dev-qa-db-ja.com

xmllint不明なオプション '--xpath'

私はこの構文をいくつかの場所で見ました(例えば、 ここ ):

xmllint --xpath '/plist/array/string/text()' tmp.xml、xpathセレクターを使用して特定のXMLノードを照会するために使用されます。ただし、これを自分のマシン(mac os x snow leopard)で実行しようとすると、エラーUnknown option --xpathが発生します。

Xmllintのマニュアルページを詳しく見てみると、--xpathオプションが文書化されていません...

私はここで何かを完全に見逃していますか?

23
Neal Pisenti
xmllint --Shell tmp.xml <<<'xpath /plist/array/string/text()'

Stdinを読み取るためにxmllintを作成する必要がある場合:

cat /tmp/tmp.xml | xmllint --Shell <(cat) <<<'xpath /plist/array/string/text()'
8
Alexey

一部の人々にとって、更新はオプションではありません。他のチームによってインストールされた特定のバージョンで作業する必要があり、それを使用します。

--Shellを試すことができます:

xmllint --Shell tmp.xml << EOF
'/plist/array/string/text()'
EOF
6
trompa

ああ、うん、libxml2の古いバージョンの問題だったに違いない。

Macportsを介してlibxml2を(v2.7.8に)更新すると、問題が修正されたようです。

5
Neal Pisenti

Macのコマンドラインからplistファイルを操作する場合は、PlistBuddyを使用します。

たとえば、シェルスクリプトでこの種のことを行うことができます。

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

これは非常に強力で、配列や辞書の項目を追加/削除したり、キーまたはインデックス付きの値を検索したり、他のファイルをコピー/マージ/インポートしたりできます。詳細については、/usr/libexec/PlistBuddy -hを参照してください。

1
jhabbott