对于以下XML:
<properties>
<entry key="foo">bar</entry>
</properties>
我可以使用以下augeas命令更新带有属性“foo”的退出条目:
set /files/test.xml/properties/entry[#attribute/key='foo']/#text bar2
如果没有带输入属性的现有条目,是否有augeas命令创建一个新节点(带有key属性),如果输入属性已经存在,则更新现有条目?我尝试了以下方法:
set /files/test.xml/properties/entry[#attribute/key='hello']/#text world
但这只会产生以下结果,没有属性:
<properties>
<entry key="foo">bar2</entry>
<entry>world</entry>
</properties>
答案 0 :(得分:2)
/files/test.xml/properties/entry[#attribute/key='hello']/#text
与任何节点都不匹配,因此Augeas会创建一个新节点。如果您想更新这两个值。
显然,您只想保留一个entry
节点并设置其文本和key
属性:
defnode entry /files/test.xml/properties/entry
set $entry/#attribute/key 'hello'
set $entry/#text 'world'
答案 1 :(得分: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