gpt4 book ai didi

xml - 为特定标签替换 XML 文件中的值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:00 27 4
gpt4 key购买 nike

我的 Linux 机器上有一个 XML 文件 MyFile.xml。

<?xml version="1.0" encoding="UTF-8"?>
<project>
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<env name="envvar" value="/opt/environment/environment.properties" />
<env name="JDBC_Driver" value="/opt/JDBC/ojdb6.jar" />
<env name="agent/enable" value="true" />
</project>

我需要将 env 名称的值更改为 "false"(当它为 true 时)和 "true"(当它为 false 时)每当我收到要求时,在 XML 文件中添加 ="agent/enable" 标记。

我只是想为此使用一些 shell 脚本。我知道这可以在 Linux 中使用 Sed 命令来完成,但我不擅长正则表达式。这样,每当我需要更改时,我都可以运行一个脚本。

注意:脚本应该更改 XML 文件,并且应该以相同的名称保存在文件系统上。

最佳答案

不要尝试使用纯文本工具编辑 XML;它只能以糟糕的方式结束。没有人希望他们的 XML 工具在向 XML 中插入换行符或更改 <foo/> 时出现故障。节点到 <foo></foo> ,但如果它们基于 sed(并且不是离谱的复杂),它们就会。

相反,请使用适当的 XML 解析工具,例如 xmlstarlet :

xmlstarlet ed --inplace -u '/project/env[@name="agent/enable"]/@value' -x 'string(not(. = "true"))' filename.xml

说明

xmlstarlet ed --inplace -u <foo> -x <bar> filename.xml

更新符合 XPath 表达式 <foo> 的节点获得 XPath 表达式的值 <bar> ,

/project/env[@name="agent/enable"]/@value

是一个选择 value 的 XPath 表达式env 的属性name 的节点属性是 agent/enable那是 project 的 child 根节点——这应该充分描述你想要改变的值——和

string(not(. = "true"))

是一个 XPath 表达式,即 false如果当前检查的值为 "true"true否则。当前检查的值是value的旧值正在更新的属性。

关于xml - 为特定标签替换 XML 文件中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011637/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com