如何使用xmlstarlet命令替换XML标签中的CDATA值?
解决xmlstarlet修改XML中CDATA内容时的转义问题
当使用xmlstarlet的ed -u命令修改包含CDATA的XML节点值时,直接在-v参数中写入<![CDATA[...]]>会导致标签被转义成实体字符(<变为<,>变为>),无法得到预期的CDATA格式。
正确命令
使用--cdata选项指定CDATA内部的内容,xmlstarlet会自动生成正确的CDATA标签:
xmlstarlet ed -u '//item[@name="Rx_Frequency"]/val' --cdata '1234' file.xml
如果需要保留原XML的缩进格式,添加-P参数(保留空白):
xmlstarlet ed -P -u '//item[@name="Rx_Frequency"]/val' --cdata '1234' file.xml
示例验证
- 输入文件(file.xml):
<item name="Rx_Frequency"> <val><![CDATA[xxx]]></val> </item>
- 错误命令输出:
<item name="Rx_Frequency"> <val><![CDATA[1234]]></val> </item>
- 正确命令输出:
<item name="Rx_Frequency"> <val><![CDATA[1234]]></val> </item>
内容的提问来源于stack exchange,提问作者Abdul Rehman
相关产品推荐
相关产品推荐

