6

データセットを格納する非常に大きな (100 メガバイト以上の非圧縮) 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>

<constant1>ここで、 の値を 18に変更したいのですが、要素が valueを持つオブジェクトに対してのみです。私は XML スターレットのドキュメントを調べてきましたが、編集に関するその記事には、何かが欠けていない限り、ツリー内で要素の属性を直接検索する方法の例しかありません...NameFoo

4

1 に答える 1

13

...どうやら私はばかです。この回答で示されているように、属性値を検索するのと同じ方法で要素値を検索できるため、正しいコマンドは次のようになります。

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

... また、非常に大きなファイルで作業する場合の注意事項: 出力リダイレクトを使用しないxmlstarletと、stdout に出力されます。すべての 100 メガバイト以上の xml。おっとっと。

于 2013-04-12T12:15:31.853 に答える