を使用して多数の xml ファイル (maven poms) を処理しようとしていますxmllint --xpath
。いくつかの試行錯誤の結果、これらのファイルのデフォルトの名前空間宣言が正しくないために、期待どおりに機能しないことがわかりました。これは次のとおりです。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
単純なコマンドは次のように失敗します。
$ echo $(xmllint --xpath '/project/modelVersion/text()' pom.xml )
XPath set is empty
xmlns 属性を削除した場合、ルート要素を次のように置き換えます。
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
前のコマンドは、予想される出力を提供します。
$ echo $(xmllint --xpath '/project/modelVersion/text()' pom.xml )
4.0.0
特にmaven自体は文句を言わないので、何百ものpomファイルを変更することはオプションではありません。
xmllint
でファイルを処理する方法はありますかxmlns
?
アップデート
ダミアンのおかげで、私はいくつかの進歩を遂げることができました:
$ ( echo setns x=http://maven.apache.org/POM/4.0.0; echo 'xpath /x:project/x:modelVersion/text()'; ) | xmllint --shell pom.xml
/ > setns x=http://maven.apache.org/POM/4.0.0
/ > xpath /x:project/x:modelVersion/text()
Object is a Node Set :
Set contains 1 nodes:
1 TEXT
content=4.0.0
しかし、これは私が必要とすることを完全には行いません。私のフォローアップの質問は次のとおりです。
テキストだけを印刷する方法はありますか?
4.0.0
上記の例で出力に on を含めたい約 30 文字で出力が切り捨てられるようです。完全な出力を取得することは可能ですか? これは起こりません
xmllint --xpath