2

对于以下 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>
4

2 回答 2

2

/files/test.xml/properties/entry[#attribute/key='hello']/#text不匹配任何节点,因此 Augeas 创建了一个新节点。如果要更新这两个值。

显然,您只想保留一个entry节点并设置其文本和key属性:

defnode entry /files/test.xml/properties/entry[#attribute/key="foo"]
set $entry/#attribute/key 'hello'
set $entry/#text 'world'
于 2015-05-11T07:22:19.540 回答
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
于 2015-11-26T17:27:21.013 回答