yq v4.34.2处理单元素XML时数据丢失问题求助
解决yq处理单个XML
<string>元素时输出异常的问题 问题原因
yq解析XML时,当<string>节点仅存在单个实例时,会被解析为单个对象而非数组;而存在多个实例时会解析为数组。原命令中使用.resources.string[]索引,在单个对象场景下会遍历该对象的所有属性(而非对象本身),导致提取不到目标数据,输出空内容。
修复命令
通过强制将单个<string>对象转为数组,统一处理单/多元素场景:
yq -p=xml '(.resources.string | arrays // [.])[] | [.+@name, .+content] | join("|")' sample.xml
命令解释
(.resources.string | arrays // [.]):判断.resources.string是否为数组,若是则直接使用;若为单个对象则包装成数组,确保后续[]索引能正确遍历每个<string>元素- 后续逻辑与原命令一致:提取
name属性和元素内容,拼接为键|值格式
验证示例
单个的XML文件(sample.xml)
<resources> <string name="app_name">MyApp</string> </resources>
执行修复命令后输出:
app_name|MyApp
多个的XML文件
原命令能正常输出的多元素场景,修复后的命令依然保持原有正确输出。
内容的提问来源于stack exchange,提问作者hanaZ
相关产品推荐
相关产品推荐

