2013-04-12 3 views
6

Tôi có một tập tin XML lưu trữ lớn lớn (100+ megabyte), và tôi đang cố gắng thay đổi có chọn lọc một số giá trị.Thay đổi giá trị của một phần tử XML tùy thuộc vào giá trị của một phần tử khác trong cây

Ví dụ, nói sample.xml trông như sau:

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

Bây giờ tôi muốn thay đổi giá trị của <constant1> đến 18, nhưng chỉ cho đối tượng có Name phần tử có giá trị Foo. Tôi đã poking tại tài liệu XML Starlet nhưng article on editing của nó chỉ có các ví dụ về cách tìm các thuộc tính của các phần tử trực tiếp trên cây, trừ khi tôi đang thiếu một cái gì đó ...

Trả lời

10

... Dường như tôi ' m một thằng ngốc; Như thể hiện trong this answer bạn có thể tìm kiếm yếu tố đánh giá cao giống như cách bạn có thể tìm kiếm các giá trị thuộc tính, vì vậy lệnh đúng sẽ là:

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

... Ngoài ra, báo trước khi làm việc trên các tập tin thực sự lớn: Không có chuyển hướng đầu ra, xmlstarlet các bản in thành thiết bị xuất chuẩn. Tất cả hơn 100 megabyte xml. Rất tiếc.

+0

Cảm ơn bạn đã theo dõi ngắn gọn. – seren