问题
I am using augeas to manipulate XML on some machines. Whereas creating new nodes and also setting a bunch of attributes worked like a charm I'm biting my nails of adding a simple attribute to an XML file. XML looks like the following:
<?xml version="1.0"?>
<Context>
<WatchedResource></WatchedResource>
</Context>
I'm no just trying to add allowLinking="true"
to the Context root node via
set /files/path/to/my/file.xml/Context/#attribute/allowLinking "true"
Which is unfortunately always failing with
/error = "put_failed"
/error/path = "/files/path/to/my/file.xml/Context"
/error/lens = "/usr/share/augeas/lenses/dist/xml.aug:134.10-.73:"
/error/message = "Failed to match \n { /#attribute/ }?({ /#text/ …
I'm using puppet opensource 3.4.2 with augeas 1.0.0.
Any suggestion what I'm doing wrong?
回答1:
Order matters in the Augeas tree. In that case, XML node attributes need to be set before the #text
node and the child nodes.
So what you need is:
ins #attribute before /files/test.xml/Context/#text
set /files/test.xml/Context/#attribute/allowLinking true
Note that this change is not idempotent, since insert
is not an idempotent operation.
On Puppet, you could use onlyif
to make this idempotent.
来源:https://stackoverflow.com/questions/21289801/issues-adding-attribute-to-xml-root-node-via-augeas