Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Copy XmlStarlet能否在复制期间保留CDATA?_Copy_Cdata_Xmlstarlet_Preserve - Fatal编程技术网

Copy XmlStarlet能否在复制期间保留CDATA?

Copy XmlStarlet能否在复制期间保留CDATA?,copy,cdata,xmlstarlet,preserve,Copy,Cdata,Xmlstarlet,Preserve,使用copy时如何使XmlStarlet保留CDATA?必须维护,因为生成(和使用)数据的应用程序坚持在某些数据周围使用CDATA指令 Example.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="20.01" > <Controller Use="Target" Na

使用copy时如何使XmlStarlet保留CDATA?必须维护
,因为生成(和使用)数据的应用程序坚持在某些数据周围使用CDATA指令

Example.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="20.01" >
    <Controller Use="Target" Name="SOME_TARGET_NAME" ProcessorType="1789-L60">
        <Tags>
            <Tag Name="gstrScrap" TagType="Base" DataType="STRING" Constant="false" ExternalAccess="Read/Write">
                <Data>05 00 00 00 53 43 52 41 50 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00</Data>
                <Data Format="String" Length="5">
                    <![CDATA['SCRAP']]>
                </Data>
            </Tag>
        </Tags>
    </Controller>
</RSLogix5000Content>
生成应用程序无法处理的数据,因为
已从左右的“废料”中删除

<Tag Name="gstrScrap" TagType="Base" DataType="STRING" Constant="false" ExternalAccess="Read/Write">
                                <Data>05 00 00 00 53 43 52 41 50 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00</Data>
                                <Data Format="String" Length="5">
                                        'SCRAP'
                                </Data>
                        </Tag>

05 00 00 00 53 43 52 41 50 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
“废品”
给你:

xml sel -t -c "RSLogix5000Content/Controller/Tags/Tag" Example.xml >t1.xml
xml ed -i "/Tag/Data/text()" -t text -n "" -v "<![CDATA[" t1.xml >t2.xml
xml ed -a "/Tag/Data/text()" -t text -n "" -v "]]>" t2.xml >t3.xml
sed -r "s/&lt;!\[CDATA\[/<![CDATA[/g; s/\]\]&gt;/]]>/g" t3.xml >t4.xml
xmlsel-t-c“rslogix5000内容/控制器/标签/标签”Example.xml>t1.xml
xml ed-i“/Tag/Data/text()”-t text-n“-v”t2.xml>t3.xml
sed-r“s/!\[CDATA\[//g”t3.xml>t4.xml
除非xml中有转义字符,否则不需要:

xml sel -t -c "RSLogix5000Content/Controller/Tags/Tag" Example.xml >t1.xml
xml ed -i "/Tag/Data/text()" -t text -n "" -v "<![CDATA[" t1.xml >t2.xml
xml ed -a "/Tag/Data/text()" -t text -n "" -v "]]>" t2.xml >t3.xml
xml unesc <t3.xml >t4.xml
xmlsel-t-c“rslogix5000内容/控制器/标签/标签”Example.xml>t1.xml
xml ed-i“/Tag/Data/text()”-t text-n“-v”t2.xml>t3.xml
xml unesc t4.xml

CDATA
只是转义字符串的语法糖。你确定需要它吗?你测试过吗?如果需要
CDATA
部分,则XML不是作为XML处理,就是被不符合W3C XML建议的应用程序使用。是的,我已经通过手动添加回它被一个显然不符合XML标准的应用程序使用。
xml sel -t -c "RSLogix5000Content/Controller/Tags/Tag" Example.xml >t1.xml
xml ed -i "/Tag/Data/text()" -t text -n "" -v "<![CDATA[" t1.xml >t2.xml
xml ed -a "/Tag/Data/text()" -t text -n "" -v "]]>" t2.xml >t3.xml
xml unesc <t3.xml >t4.xml