使用开始标记中的值替换结束标记

时间:2015-10-13 11:24:25

标签: xml replace sed

出于某种原因,我用于某些目的的许多XML文件现在具有以下结构:

<A1333>006</ANDfoo>
<A45>RO0</ANDfoo>
<A5652>5486465465</ANDfoo>
<A173>TEST DUMMY</ANDfoo>
<A1805>34566000</ANDfoo>
<A3>FKK</ANDfoo>
<A2>FKK</ANDfoo>
<A2002></ANDfoo>
<A9903>CV0000</ANDfoo>
<A558>
               <B1>GHJ</B1>
               <B5>101010</B5>
</ANDfoo>

所有结束标记现在具有相同的值。如何使用开始标记中的正确值替换end标记中的值,以便再次获得有效的XML。我尝试使用sed但到目前为止没有成功的结果。你能举一个例子,用sed做这样的替换吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

     if(!empty($array['streams'])){
       $phpArray= json_decode($array['streams'],true);
       print_r($phpArray);
    }

这将修复标记在同一行中的开始和结束,以及包含一个嵌套级别以及在单独行上开始和结束的标记。

要从XML-oneliner中获取此信息,您可以再次使用sed:

sed -e 's/<\([^>]*\)>\([^<>]*\)<[^>]*>/<\1>\2<\/\1>/g;  \ # fix Tags ending on same line
        /^<[^\/>]*>$/h;                                 \ # Push single opening tag
        /^<\/[^>]*>$/{g;s/</<\//}'                        # Pop and fix single closing tag