Hi, please help on this. I want extract values of xml file structure and print in determined way.
<ProjectName> --> only appears once
<StructList> --> is the top node
<Struct> node --> could be more than 1
NameID, STX, STY, PRX, PRY --> appears only 1 time within each <Struct> node
<PR_Ranges> node --> only appears once but inside this node could be more than 1 <RangesInfo>
I want to extract children (OD, ODF, ODRangeStart and ODRangeStop) from each <RangesInfo>
I want to print the values for each <Struct> node in a single line with this format
ProjectName|NameID|STX-STY|PRX-PRY|OD-ODF|ODRangeStart|ODRangeStop
My input xml, current awk code and current output that is wrong is below
echo "<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ProjectInfo>
<ProjectName>HY-LKL</ProjectName>
<StructList>
<Struct>
<StructData>
<NameID>ROPSL</NameID>
<STR_VAL>
<STX>210</STX>
<STY>21</STY>
</STR_VAL>
<PRO_VAL>
<PRX>62</PRX>
<PRY>822</PRY>
</PRO_VAL>
<PR_Ranges>
<RangesInfo>
<ValueRange>
<OD>22</OD>
<ODF>3199</ODF>
</ValueRange>
</RangesInfo>
<RangesInfo>
<ValueRange>
<OD>22</OD>
<ODF>023</ODF>
<ODRange>
<ODRangeStart>00</ODRangeStart>
<ODRangeStop>99</ODRangeStop>
</ODRange>
</ValueRange>
</RangesInfo>
</PR_Ranges>
</StructData>
</Struct>
<Struct>
<StructData>
<NameID>MACLS</NameID>
<STR_VAL>
<STX>210</STX>
<STY>01</STY>
</STR_VAL>
<PRO_VAL>
<PRX>62</PRX>
<PRY>816</PRY>
</PRO_VAL>
<PR_Ranges>
<RangesInfo>
<ValueRange>
<OD>22</OD>
<ODF>010</ODF>
<ODRange>
<ODRangeStart>00</ODRangeStart>
<ODRangeStop>99</ODRangeStop>
</ODRange>
</ValueRange>
</RangesInfo>
</PR_Ranges>
</StructData>
</Struct>
</StructList>
</ProjectInfo>" |
awk -F"<|>" '
BEGIN{print "ProjectName|NameID|STX-STY|PRX-PRY|OD-ODF|ODRangeStart|ODRangeStop"}
/ProjectName/{printf "%s",$3}
/NameID/{id=$3}
/STX/{stx=$3}
/STY/{sty=$3}
/PRX/{prx=$3}
/PRY/{pry=$3}
/OD/ {od=$3}
/ODF/{odf=$3}
/ODRangeStart/{rngStart=$3}
/ODRangeStop/ {rngStop=$3
printf "|%s|%s-%s|%s-%s|%s-%s|%s|%s\n",id,stx,sty,prx,pry,od,odf,rngStart,rngStop
stx=sty=prx=pry=od=odf=rngStart=rngStop=""
}
'
My current output (not desired output)
ProjectName|NameID|STX-STY|PRX-PRY|OD-ODF|ODRangeStart|ODRangeStop
HY-LKL|ROPSL|210-21|62-822|99-023|00|99
|MACLS|210-01|62-816|99-010|00|99
My desired output
ProjectName|NameID|STX-STY|PRX-PRY|OD-ODF|ODRangeStart|ODRangeStop
HY-LKL|ROPSL|210-21|62-822|22-3199||
||||22-023|00|99
|MACLS|210-01|62-816|22-010|00|99
Thanks in advance for any help.