【问题标题】:Updating text in XML file using a certain node (Shell script)shell使用某个节点(Shell 脚本)shell 更新 XML 文件中的文本
【发布时间】:2018-12-31 09:01:24
【问题描述】:

寻找一种使用 shell 更改 xml 文件中节点值的方法。

xml文件中的数据示例:

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:postgresql://myhost/metastore</value>

</property>

基于&lt;name&gt;节点,修改&lt;value&gt;节点中的文字。是否可以通过 sed 或 xmlstarlet 实现。

我想要的是基于&lt;name&gt; = javax.jdo.option.ConnectionURL,将&lt;value&gt;改为Banana,所以输出为:

<property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>Banana</value>

 </property>

提前致谢

【问题讨论】:

    标签: xml shell sed


    【解决方案1】:

    使用xmlstarlet,您可以使用以下命令实现此目的:

    xmlstarlet ed -u '//property[name="javax.jdo.option.ConnectionURL"]/value' -v newValue source.xml
    

    这会在 source.xml 的 XML 中设置新值 newValue

    其他信息:
    始终使用 XML 解析器来处理 XML 文件和基于文本的实用程序,如 sed

    【讨论】: