xml - 使用 Augeas 创建或更新 XML 文件中的部分

标签 xml augeas

我想使用 Augeas 更新 XML 配置文件中的一个部分或添加一个新部分(如果不存在)。

XML 文件如下所示:

<?xml version="1.0"?>
<security>
          <users>
            ...
            <user>
              <id>deployment</id>
              <firstName>Deployment</firstName>
              <lastName>User</lastName>
              <password>somepasshere</password>
              <status>active</status>
              <email>changeme1@yourcompany.com</email>
            </user>
          </users>
</security>

如果 ID 已经存在,我想更新姓氏/名字/电子邮件,或者如果它是新 ID,我想添加一个新的用户部分。

在 AugTool 中我使用:

augtool> set /augeas/load/Xml/lens Xml.lns
augtool> set /augeas/load/Xml/incl /security.xml
augtool> load

我还在学习 Augeas,所以这是我第一次尝试获取节点:

augtool> print /files/security.xml/security/users/user/*[ #text= 'deployment']

在用户中更新或创建新用户部分的命令是什么?

谢谢!

最佳答案

首先,对于最近的 Augeas 版本 (>= 1.0.0),您可以使用 --transform 来设置转换。假设文件是​​ ./users.xml:

$ augtool -r . --noautoload --transform "Xml.lns incl /users.xml"
augtool> defnode user /files/users.xml/security/users/user[id/#text="deployment"] # Create a new user entry if it doesn't exist yet, assign node to the "user" variable
augtool> set $user/id/#text "deployment"         # Set id if node was just created
augtool> set $user/firstName/#text "Deployment"  # Set firstName
augtool> set $user/lastName/#text "User"         # Set lastName
augtool> set $user/email/#text "changeme1@yourcompany.com"  # set email
...
augtool> save
Saved 1 file(s)

你甚至可以把它变成一个脚本,比如说 user.augtool:

#!/usr/bin/augtool -sf
defnode user /files/users.xml/security/users/user[id/#text="deployment"]
set $user/id/#text "deployment"
set $user/firstName/#text "Deployment"
set $user/lastName/#text "User"
set $user/email/#text "changeme1@yourcompany.com"

然后您可以启动它:

$ chmod +x user.augtool
$ ./user.augtool --transform "Xml.lns incl /users.xml" -r .
Saved 1 file(s)

关于xml - 使用 Augeas 创建或更新 XML 文件中的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21338722/

相关文章:

xml - XQuery 1.0 中是否存在一个函数来检查列表中的值是否存在于另一个列表中?

c# - 来自 WebService 的未经净化的 XML,如何净化

puppet - Augeas 无法将节点设置为另一个节点的值?

file - augeas 的示例文件

linux - 为什么文件名需要重复?

c# - 从 XML 文件中捕获特定元素

java - 在 Android 上使用 XMLBeans

xml - 使用 golang 解析 tei XML

properties-file - Augeas:如何缩短树路径?