如何使用xmlstarlet提取游戏配置XML的settings节点内容并格式化输出
解决方案
使用xmlstarlet的sel命令,通过模板模式精准提取元素名和属性值,并添加分隔符与换行,命令如下:
xml sel -t -m "/properties/settings/*" -v "name()" -o " " -v "@value" -n your-config.xml
参数说明:
-t:启用模板处理模式,用于自定义输出格式-m "/properties/settings/*":匹配<settings>下的所有子元素-v "name()":输出当前匹配元素的标签名称(如fooBar)-o " ":输出一个空格作为名称与属性值的分隔符-v "@value":输出元素的value属性值(如abc)-n:在每个配置项后输出换行符,确保每行一个配置项
效果验证:
针对你提供的XML结构:
<properties> ... <settings> <fooBar value="abc"/> <uffDa value="1.23"/> ... </settings> ... </properties>
执行命令后会输出:
fooBar abc uffDa 1.23 ...
为什么之前的命令不符合需求?
- 最初用
-c参数是复制节点的XML内容,所以会包含标签结构; - 第二次命令依然用
-c,只是匹配子节点,输出的是所有子节点的XML文本拼接,没有换行和格式调整。而-v参数是专门提取节点/属性的文本值,配合-o和-n就能实现你想要的简洁格式。
内容的提问来源于stack exchange,提问作者alphaniner
相关产品推荐
相关产品推荐

