2013-04-12 13 views
6

非常に大きな(100MB以上の非圧縮の)XMLファイルがデータセットを格納していて、一部の値を選択的に変更しようとしています。例えばツリー内の別の要素の値に応じてXML要素の値を変更する

sample.xmlは次のようになります言う:

<objects> 
    <object> 
    <name>Foo</name> 
    <constant1>10</constant1> 
    <constant2>20</constant2> 
    </object> 
    <object> 
    <name>Bar</name> 
    <constant1>15</constant1> 
    <constant2>40</constant2> 
    </object> 
<objects> 

今、私は18に<constant1>の値を変更したいのですが、Name要素値Fooを持つオブジェクトののみ。 私はXML Starletのドキュメントを掘り下げてきましたが、article on editingには、何かが見つからない限り、ツリーの要素の属性を直接探す方法の例しかありません。

答えて

10

...どうやら私は、馬鹿だ。 this answerで実証されているように、あなたは、属性値を検索することができ、同じように値の要素を検索することができますので、正しいコマンドは次のようになります。

xmlstarlet ed -u '//object[name="Foo"]/const1' -v 18 sample.xml

...また、非常に大きなファイルに取り組んで警告する場合:なしで出力リダイレクトxmlstarletは標準出力に出力します。すべての100 MB以上のxml。おっとっと。

+0

簡潔なフォローアップをありがとう。 – seren

関連する問題