使用Augas将新节点添加到XML文件中



我有一个XML文件/opt/webapp/config.XML,用于包含父节点的自定义webapp。

<items>
</items>

我正在尝试添加一个具有属性的新子节点列表,同时确保子节点不包含结束/结束标记,因为应用程序需要该格式。

<items>
<item value="video/*"/><item value="audio/*"/><item value="application/rar"/><item value="application/x-zip"/><item value="application/x-gzip"/>
</items>

如果我使用augtool打开现有配置,我将得到以下输出。

/files/opt/webapp/config.xml/File/FileTypes
/files/opt/webapp/config.xml/File/FileTypes/#text = "n"
/files/opt/webapp/config.xml/File/FileTypes/items
/files/opt/webapp/config.xml/File/FileTypes/items/#text = "n"
/files/opt/webapp/config.xml/File/FileTypes/items/item[1] = "#empty"
/files/opt/webapp/config.xml/File/FileTypes/items/item[1]/#attribute
/files/opt/webapp/config.xml/File/FileTypes/items/item[1]/#attribute/value = "video/*"
/files/opt/webapp/config.xml/File/FileTypes/items/item[2] = "#empty"
/files/opt/webapp/config.xml/File/FileTypes/items/item[2]/#attribute
/files/opt/webapp/config.xml/File/FileTypes/items/item[2]/#attribute/value = "audio/*"
/files/opt/webapp/config.xml/File/FileTypes/items/item[3] = "#empty"
/files/opt/webapp/config.xml/File/FileTypes/items/item[3]/#attribute
/files/opt/webapp/config.xml/File/FileTypes/items/item[3]/#attribute/value = "application/rar"

我在这里和这里发现了一些关于xml和Augas的文章,但这些例子遵循了带有起始和结束标记的格式。例如:<item value="application/rar"></item>。我正试图找到一种方法,看看Augas是否也可以创建和添加只带有自关闭标记的子节点。

我使用的是augtool(1.10.1版(,它与RHEL 7上的木偶代理5.5.10一起提供。

谢谢。

正如您在示例中看到的,自关闭标记的值为#empty,因此您只需要在项目上设置该值。

所以在你的情况下,你可以做一些类似的事情:

# set context to use relative paths later
set /augeas/context /files/opt/webapp/config.xml/File/FileTypes/items
# define a $video variable pointing to the video element, define it as self-closing
defnode video item[#attribute/value="video/*"] "#empty"
# Set element value
set $video/#attribute/value "video/*"
defnode audio item[#attribute/value="audio/*"] "#empty"
set $audio/#attribute/value "audio/*"
defnode rar item[#attribute/value="application/rar"] "#empty"
set $rar/#attribute/value "application/rar"

等等。

导致:

<items>
<item value="video/*"/>
<item value="audio/*"/>
<item value="application/rar"/>
</items>

defnode将定义一个指向节点的变量,并在节点还不存在时设置其值。因此,这个代码将是幂等的。

相关内容

  • 没有找到相关文章

最新更新