2015-05-06 4 views
2

Для следующего XML:как обновить существующие или создать новый узел XML с Авгиями

<properties> 
    <entry key="foo">bar</entry> 
</properties> 

Я могу обновить выход записи с атрибутом «Foo» с помощью следующей команды Авгий:

set /files/test.xml/properties/entry[#attribute/key='foo']/#text bar2 

Is есть ли команда augeas для создания нового узла (с ключевым атрибутом), если нет существующей записи с входным атрибутом, и обновление существующей, если запись уже существует с входным атрибутом? Я попытался следующие:

set /files/test.xml/properties/entry[#attribute/key='hello']/#text world 

Но это только результаты в дальнейшем без атрибута:

<properties> 
    <entry key="foo">bar2</entry> 
    <entry>world</entry> 
</properties> 
+0

Возможный дубликат [Проблемы с добавлением атрибута в корень XML узел через augeas] (http://stackoverflow.com/questions/21289801/issues-adding-attribute-to-xml-root-node-via-augeas) – kkamilpl

ответ

2

/files/test.xml/properties/entry[#attribute/key='hello']/#text не соответствует ни одному узлу, поэтому Авгий создает новый узел. Если вы хотите обновить оба значения.

Судя по всему, вы хотите сохранить только один entry узел и установить как его текст и key атрибут:

defnode entry /files/test.xml/properties/entry 
set $entry/#attribute/key 'hello' 
set $entry/#text 'world' 
0

Предполагая, что вы хотите этот вывод:

<properties> 
    <entry key="foo">bar</entry> 
    <entry key="hello">world</entry> 
</properties> 

Следующий код должен сделать трюк :

set /augeas/load/Xml/incl[2] /path/to/file.xml 
load 
defvar properties "/files/path/to/file.xml/properties" 
set $properties/entry[last()+1]/#attribute/key "hello" 
set $properties/entry[last()]/#text "world" 
save 
Смежные вопросы