28

pom.xml からノードの値を抽出しようとしています:

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <parent>
        <groupId>org.me.labs</groupId>
        <artifactId>my-random-project</artifactId>
        <version>1.5.0</version>
    </parent>
    ...
</project>

シェル コマンドを使用して、XML から artifactId とバージョンを抽出する必要があります。次の要件/観察事項があります。

  1. シェル スクリプトは、作業で使用するビルド アセンブリ ファイル内で実行されるため、スクリプトは小さいほど優れています。
  2. 複数のシステム (通常は RHEL5) で使用されるため、デフォルトのイメージでネイティブに実行できるものを探しています。
  3. のようなタグは、pom の他の場所で発生する可能性があるため、これらのタグを単純に awk することはできません。

私は次のことを試しました:

  1. xpath私の Mac では動作しますが、RHEL マシンではデフォルトで使用できません。同様にxmllint --xpath、これは の新しいバージョンでのみ利用できると思いますがxmllint、これは私が持っておらず、強制することもできません。
  2. xmllint --pattern有望に思えましたが、xmllint --pattern '//project/parent/version' pom.xml(XML全体を出力する)またはxmllint --stream --pattern '//project/parent/version' pom.xml(出力なし)から出力を取得できないようです。

これはSOに関するよくある質問だと思いますが、上記の点が、これらの回答を使用できない理由です。あなたの助けのためのTIA。

4

6 に答える 6

25

--formatドキュメントの書式設定 (インデントなど) にのみ使用されます。--xpath(Ubuntu、libxml v20900でテスト済み)を使用してそれを行うことができます:

$ xmllint --xpath "//project/parent/version/text()" pom.xml
1.5.0
于 2013-06-06T10:53:11.833 に答える
6

私は、ウェブサイトから価値を引き出す良い方法を探してここに来ました。次の例は、(投稿者とは異なり) --xpath をサポートするバージョンの xmllint を使用している場合に役立ちます。

Elasticsearch .debfile の最新の安定バージョンを取得してインストールする必要がありました。メンテナーは、クラス「バージョン」のスパンにバージョン番号を入れてくれました。

version=`curl -s http://www.elasticsearch.org/download/ |\
 xmllint --html --xpath '//span[@class="version"]/text()'\
 2>/dev/null - `;

何が起こるか:

curl -s (サイレント) オプションを使用します。

curl -s http://www.elasticsearch.org/download/

xmllint --html および --xpath スイッチを使用します。xpath 引数 (一重引用符で囲む)

'//span[@class="version"]/text()'

... クラス属性 (@class) "version" を持つ <span> ノードを探し、テキスト値 (/text()) を抽出します。

xmllint は (驚いたことに!) リンターであるため、HTML ストリーム内の避けられないゴミについて不平を言うでしょう。通常の方法で stderr を /dev/null に送信します。

 2>/dev/null

最後に、xmllint コマンドの末尾にある " - " に注意してください。これは、ストリームが stdin から来ていることを xmllint に伝えます。

于 2013-12-05T16:36:46.050 に答える
3

XPath 関数を使用text()すると、XML タグを削除するのではなく、要素の値が得られます。

echo "cat //project/parent/version/text()" | xmllint --shell pom.xml
于 2013-11-06T00:36:11.430 に答える