Puppet Augeas - 无法更新包含 CDATA 的 xml 节点中的值
Puppet Augeas - cannot update value in xml node containing CDATA
我有一个与此类似的 xml 文档:
<?xml version="1.0" encoding="UTF-8"?>
<example>
<member name="dbsettings">
<node name="username"><![CDATA[someusername]]></node>
<node name="password"><![CDATA[mypassword]]></node>
</member>
<member name="sitesettings">
<node name="title"><![CDATA[just a title]]></node>
</member>
</example>
我正在尝试使用以下 augeas 命令更新 puppet 中的这些设置:
set example/member[#attributes/name='dbsettings']/node[#attributes/name='username']/#text anotherusername
我期望它做的是将节点的全部内容替换为 "anotherusername" 而不是它只是附加它导致:
<node name="username"><![CDATA[someusername]]>anotherusername</node>
我如何select并使用 augeas 更新 CDATA 元素的内容或在不删除实际节点本身的情况下删除它? (真实节点包含更多我不想硬编码的属性)
Augtool 可以向您展示树的实际外观:
$ augtool -At "Xml incl /test.xml" -r .
augtool> set /augeas/context /files/test.xml
augtool> print example/member[#attribute/name='dbsettings']/node[#attribute/name='username']
/files/test.xml/example/member[1]/node[1]
/files/test.xml/example/member[1]/node[1]/#attribute
/files/test.xml/example/member[1]/node[1]/#attribute/name = "username"
/files/test.xml/example/member[1]/node[1]/#CDATA = "someusername"
这表明两件事:
- 属性的语法是
#attribute
,没有 's'
- CDATA 存储在
#CDATA
子节点中
因此你的命令应该是:
set example/member[#attribute/name='dbsettings']/node[#attribute/name='username']/#CDATA anotherusername
我有一个与此类似的 xml 文档:
<?xml version="1.0" encoding="UTF-8"?>
<example>
<member name="dbsettings">
<node name="username"><![CDATA[someusername]]></node>
<node name="password"><![CDATA[mypassword]]></node>
</member>
<member name="sitesettings">
<node name="title"><![CDATA[just a title]]></node>
</member>
</example>
我正在尝试使用以下 augeas 命令更新 puppet 中的这些设置:
set example/member[#attributes/name='dbsettings']/node[#attributes/name='username']/#text anotherusername
我期望它做的是将节点的全部内容替换为 "anotherusername" 而不是它只是附加它导致:
<node name="username"><![CDATA[someusername]]>anotherusername</node>
我如何select并使用 augeas 更新 CDATA 元素的内容或在不删除实际节点本身的情况下删除它? (真实节点包含更多我不想硬编码的属性)
Augtool 可以向您展示树的实际外观:
$ augtool -At "Xml incl /test.xml" -r .
augtool> set /augeas/context /files/test.xml
augtool> print example/member[#attribute/name='dbsettings']/node[#attribute/name='username']
/files/test.xml/example/member[1]/node[1]
/files/test.xml/example/member[1]/node[1]/#attribute
/files/test.xml/example/member[1]/node[1]/#attribute/name = "username"
/files/test.xml/example/member[1]/node[1]/#CDATA = "someusername"
这表明两件事:
- 属性的语法是
#attribute
,没有 's' - CDATA 存储在
#CDATA
子节点中
因此你的命令应该是:
set example/member[#attribute/name='dbsettings']/node[#attribute/name='username']/#CDATA anotherusername