我有一个xml文档,我正在使用xmlstarlet进行编辑,如果后代标记包含匹配的文本,则删除周围的C标记。
示例xml文件:
<a>
<b>
<c><d>RED</d></c>
<c><d>BLUE</d></c>
</b>
</a>
使用xpath语法:
//d[text()='RED']/ancestor::c[1]
我可以使用xmlstarlet参数删除最近的带有带有“RED”文本的d标签的c标签:
xml ed -P -O --inplace --delete //d[text()='RED']/ancestor::c[1]
问题是原始格式不会被保留,因为'P'开关应该确保,输出文件缺少换行符,看起来像:
<a> <b> <c><d>BLUE</d></c> </b></a>
请注意,我一直在使用记事本检查编辑前后的格式。有关如何让xmlstarlet保留原始格式的任何建议将不胜感激。