【问题标题】:Issues adding attribute to XML root node via augeas通过 augeas 向 XML 根节点添加属性的问题
【发布时间】:2014-02-12 21:59:53
【问题描述】:

我正在使用 augeas 在某些机器上操作 XML。虽然创建新节点并设置一堆属性就像一种魅力,但我正在为向 XML 文件添加一个简单属性而苦恼。 XML 如下所示:

<?xml version="1.0"?>
<Context>
   <WatchedResource></WatchedResource>
</Context>

我不只是想通过

allowLinking="true" 添加到上下文根节点
set /files/path/to/my/file.xml/Context/#attribute/allowLinking "true"

不幸的是,这总是失败

/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/ …

我正在使用 puppet 开源 3.4.2 和 augeas 1.0.0。

任何建议我做错了什么?

【问题讨论】:

    标签: xml puppet augeas


    【解决方案1】:

    顺序在 Augeas 树中很重要。在这种情况下,需要在#text节点和子节点之前设置XML节点属性。

    所以你需要的是:

    ins #attribute before /files/test.xml/Context/#text
    set /files/test.xml/Context/#attribute/allowLinking true
    

    请注意,此更改不是幂等的,因为insert 不是幂等操作。

    在 Puppet 上,您可以使用 onlyif 使其具有幂等性。

    【讨论】:

    • 谢谢!奇迹般有效。现在我只需要处理没有#text 节点或已经存在#attribute 的情况。 ;-)
    • 确实如此。对于复杂的情况,您可能希望使用 AugeasProviders 编写一个类型和一个基于 Augeas 的提供程序(参见 augeasproviders.com)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    相关资源
    最近更新 更多