如何使用Shell脚本从xml中的特定字段中删除CDATA

时间:2019-06-07 07:47:45

标签: xml shell

我在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>

1 个答案:

答案 0 :(得分:1)

XML中的

CDATA部分仅是一种语法功能。在语义上,XML等同于

<RECORD>
    <PROP NAME="customerType_Support">
            <PVAL>regular</PVAL>
        </PROP>
    <PROP NAME="ute.sourceSystem">
        <PVAL>
            cms
        </PVAL>
    </PROP>
</RECORD>

要用元素替换文本,可以使用例如xshXML::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。