xml - 使用 Augeas 将新节点添加到 XML 文件
问题描述
我有这个 XML 文件/opt/webapp/config.xml用于包含父节点items的自定义 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 和 Augeas 的帖子,但这些示例遵循带有开始和结束标记的格式。例如:<item value="application/rar"></item>
。而且我正在尝试找到一种方法来查看 Augeas 是否也可以创建和添加仅具有自闭合标签的子节点。
我在 RHEL 7 上使用 puppet agent 5.5.10 附带的 augtool(版本 1.10.1)。
谢谢你。
解决方案
正如您在示例中看到的,自闭合标签的值为#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
将定义一个指向节点的变量,如果它还不存在则设置它的值。因此,此代码将是幂等的。
推荐阅读
- html - HTML/CSS 不向左移动
- r - 在R中,我将如何通过一个不能接受双精度的函数循环一个字符向量
- sql - 如何计算每个工作日(周一、周二等)的行数总计(count(*))
- julia - 在 Julia 0.7 中使用 linspace
- javascript - Chrome CORB 阻止 APIGateway lambda 请求
- c - 在不持有父执行的情况下获取子进程的返回值
- r - 如何在R中保存大png文件?
- javascript - tus - 上传后访问控制允许来源错误
- sql - 如何在 SQL Server 中正确分组结果
- php - 如何在 MediaWiki 中添加自定义函数 ot User.php?