我在xml文件中有以下内容。我想使用Shell脚本从特定字段“ ute.sourceSystem”中删除CDATA。
<RECORD>
<PROP NAME="customerType_Support">
<PVAL><![CDATA[regular]]></PVAL>
</PROP>
<PROP NAME="ute.sourceSystem">
<PVAL>
<![CDATA[cms]]>
</PVAL>
</PROP>
</RECORD>
预期输出-
<RECORD>
<PROP NAME="customerType_Support">
<PVAL><![CDATA[regular]]></PVAL>
</PROP>
<PROP NAME="ute.sourceSystem">
<PVAL>
<cms>
</PVAL>
</PROP>
</RECORD>
答案 0 :(得分:1)
CDATA部分仅是一种语法功能。在语义上,XML等同于
<RECORD>
<PROP NAME="customerType_Support">
<PVAL>regular</PVAL>
</PROP>
<PROP NAME="ute.sourceSystem">
<PVAL>
cms
</PVAL>
</PROP>
</RECORD>
要用元素替换文本,可以使用例如xsh,XML::LibXML的包装:
open file.xml ;
insert element normalize-space(/RECORD/PROP[@NAME="ute.sourceSystem"]/PVAL)
into /RECORD/PROP[@NAME="ute.sourceSystem"]/PVAL ;
delete /RECORD/PROP[@NAME="ute.sourceSystem"]/PVAL/text() ;
save :b ;
请注意,它会插入<cms/>
,而不是<cms>
,因为它会创建格式错误的XML。