xml - 使用 awk 编辑特定标签下的值
问题描述
我正在尝试理解 AWK 命令。我要解决的问题如下: 我有 XML 文件的结构:
<root>
...
<elem_name name='type1'>
...
<prop name='a' type="xxx" value="000"/>
<prop name='b' type="xxx" value="000"/>
<prop name='c' type="xxx" value="000"/>
...
</elem_name>
<elem_name name='type2'>
....
<prop name='a' type="xxx" value="000"/>
<prop name='b' type="xxx" value="000"/>
<prop name='c' type="xxx" value="000"/>
...
</elem_name>
...
</root>
而且我必须在“type1”根目录下编辑道具“b”的值。正如我提到的,我想用 awk 或 sed 来做。我知道更好的工具可以做到这一点。
现在,我创建了以下命令,但它无法正常工作。
gawk '/elem_name name="type1"/ {for(i=1; i<=4; i++) {getline;found=index($0,"a");if(found != 0){sub("value=", "test", $0)}; print > "test.xml"}} {print > "test.xml" }' original_file.xml
首先,脚本执行后值没有改变,'name="type1" 从输出文件中删除。
解决方案
我必须在“type1”根目录下编辑道具“b”的值
由于我假设您正在运行的操作系统中有 python,因此我分享了以下解决方案。
import xml.etree.ElementTree as ET
FILE_NAME = 'myxml.xml'
root = ET.parse(FILE_NAME)
ele = root.find(".//elem_name[@name='type1']")
b = ele.find(".//prop[@name='b']")
b.attrib['value'] = 'new_value_goes_here'
root.write(FILE_NAME)
推荐阅读
- pyspark - 在 when/otherwise 子句中出现错误
- azure - CPU时间总和和CPU时间平均天蓝色有什么区别
- mysql - SQL group by 获取最新结果
- angularjs - 如何将数据作为 Angularjs 中的备份字段处理到范围以在请求失败时回滚?
- python - Flask 的内置服务器不阻塞?
- django - Django 自定义管理脚本:在一个命令中删除所有迁移和数据库
- cmake - 使用 TDM-GCC 和 CMake 构建 Allegro 5 库
- vue.js - 使用 VueValidate 将无效类添加到表单组以引导 CSS
- swift - 将结构传递给函数是否也使用写时复制进行优化,或者实际复制是否立即发生?
- java - 为什么数字字符的 Integer.valueOf 不返回其值?