4

XMLの例:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

シェルでxpathを使用して、xmlノードのテキスト値を変更しようとしています。ハリーポッターをゲームオブソーンズに変更したいと思います。

xpath test.xml "//bookstore/book/title/text()" 2>/dev/null

ハリーポッターを私の端末にエコーアウトします。xpathを使用して、ノードの値をハリーポッターからゲームオブソーンズに変更することは可能ですか?

ありがとう!

4

2 に答える 2

8

XPath自体を使用してXMLドキュメントを変更することはできません。しかし、xmlstarletコマンドラインユーティリティはそれを行うことができます。例:

xml ed -u "//book[1]/title" -v "Game of Thrones" bookstore.xml

出力:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
  <book>
    <title lang="eng">Game of Thrones</title>
    <price>29.99</price>
  </book>
  <book>
    <title lang="eng">Learning XML</title>
    <price>39.95</price>
  </book>
</bookstore>

注:[1]式に含まれていない場合、結果は次のようになります。

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
  <book>
    <title lang="eng">Game of Thrones</title>
    <price>29.99</price>
  </book>
  <book>
    <title lang="eng">Game of Thrones</title>
    <price>39.95</price>
  </book>
</bookstore>

上記のコマンドは、結果をstdoutに出力します。ドキュメントを変更するオプション(-Lまたは)があります。--inplace

xml ed -L -u "//book[1]/title" -v "Game of Thrones" bookstore.xml 

このオプションは、xmlstarlet 1.3.1のドキュメントには記載されていませんが、実行時に表示されます。

xml ed --help
于 2012-04-09T10:14:14.953 に答える
1

私の知る限り、XPath自体はクエリ言語にすぎないため、そのために使用することはできません。したがって、XMLファイルの作成や変更には使用できません。そのためには他のツールが必要になります。xsltprocコマンドラインツールを使用している場合は、の一部であるを確認してくださいlibxslt。私はXSLT<if>の専門家ではありませんが、リンクされたページをざっと見ると、とを使用して目的の結果を達成できると感じます<value-of>または、正規表現を使用してXMLを解析することもできますが、そうしないでください。滑りやすい坂道だと聞きました。

于 2012-04-09T09:04:32.860 に答える