Shell:如果该属性不存在,则在XML元素中添加属性

问题描述 投票:0回答:1

如果属性不存在,我想写一个Chef Recipe来为我的XML属性添加属性,如果属性存在则设置值。

XML_FILE:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="false" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

如果SSLEnabled键不存在,我想为每个Connector标记添加一个新属性SSLEnabled="true"。如果属性已存在,请将值更新为“true”。

我可以考虑使用shell命令(最好是grep / sed / awk)吗?

如果没有,哪个资源适用于此用例?

P.S:我的连接器XML标签可以跨越多行或单行。

xml shell chef chef-recipe
1个回答
1
投票

使用

xmlstarlet ed --insert '//Connector[not(@SSLEnabled)]' \
              --type attr --name 'SSLEnabled' --value "true" \
           file.xml

要将输出保存到同一文件中,请在--inplace子命令后添加ed选项。

© www.soinside.com 2019 - 2024. All rights reserved.