in reply to parsing xml file and get the values
This may get you started:
use strict; use warnings; use XML::TreeBuilder; my $root = XML::TreeBuilder->new; my $xml = do {local $/; <DATA>}; $root->parse ($xml); my @elements = $root->find ('FormattedReportObjects'); print $_->as_text () . "\n" for @elements;
__DATA__ <?xml version="1.0" encoding="UTF-8" ?> <FormattedReport xmlns="urn:crystal-reports:schemas" xmlns:xsi="http:/ +/www.w3.org/2000/10/XMLSchema-instance"> <FormattedAreaPair Level="0" + Type="Report"> <FormattedArea Type="Header"> <FormattedSections> <Fo +rmattedSection SectionNumber="0"> <FormattedReportObjects> <Formatted +ReportObject xsi:type="CTFormattedSubreport"> <ObjectName>Subreport1 +</ObjectName> <FormattedAreaPair Level="0" Type="Report"> <FormattedA +rea Type="Header"> <FormattedSections> <FormattedSection SectionNumbe +r="0"> <FormattedReportObjects /> </FormattedSection> <FormattedSect +ion SectionNumber="1"> <FormattedReportObjects /> </FormattedSection +> </FormattedSections> </FormattedArea> <FormattedAreaPair Level="1 +" Type="Details"> <FormattedArea Type="Details"> <FormattedSections> +<FormattedSection SectionNumber="0"> <FormattedReportObjects /> </Fo +rmattedSection> </FormattedSections> </FormattedArea> </FormattedA +reaPair> <FormattedArea Type="Footer"> <FormattedSections> <Formatted +Section SectionNumber="0"> <FormattedReportObjects /> </FormattedSec +tion> <FormattedSection SectionNumber="1"> <FormattedReportObjects / +> </FormattedSection> </FormattedSections> </FormattedArea> </Form +attedAreaPair> </FormattedReportObject> </FormattedReportObjects> +</FormattedSection> <FormattedSection SectionNumber="1"> <FormattedRe +portObjects> <FormattedReportObject xsi:type="CTFormattedSubreport"> + <ObjectName>Subreport2</ObjectName> <FormattedAreaPair Level="0" Typ +e="Report"> <FormattedArea Type="Header"> <FormattedSections /> </Fo +rmattedArea> <FormattedArea Type="Footer"> <FormattedSections /> </F +ormattedArea> </FormattedAreaPair> </FormattedReportObject> </Form +attedReportObjects> </FormattedSection> </FormattedSections> </For +mattedArea> <FormattedAreaPair Level="1" Type="Group"> <FormattedArea + Type="Header"> <FormattedSections> <FormattedSection SectionNumber=" +0"> <FormattedReportObjects> <FormattedReportObject xsi:type="CTForma +ttedField" Type="xsd:string" FieldName="GroupName ({Data.SYSTEM})"> +<ObjectName>Field4</ObjectName> <FormattedValue>System lgloe040</Form +attedValue> <Value>System lgloe040</Value> </FormattedReportObject> +</FormattedReportObjects> </FormattedSection> </FormattedSections> + </FormattedArea> <FormattedAreaPair Level="2" Type="Group"> <Formatt +edArea Type="Header"> <FormattedSections> <FormattedSection SectionNu +mber="0"> <FormattedReportObjects> <FormattedReportObject xsi:type="C +TFormattedField" Type="xsd:string" FieldName="GroupName ({Data.TYPE}) +"> <ObjectName>Field5</ObjectName> <FormattedValue>Type LOG</Formatt +edValue> <Value>Type LOG</Value> </FormattedReportObject> </Formatte +dReportObjects> </FormattedSection> </FormattedSections> </Formatt +edArea> <FormattedAreaPair Level="3" Type="Details"> <FormattedArea T +ype="Details"> <FormattedSections> <FormattedSection SectionNumber="0 +"> <FormattedReportObjects> <FormattedReportObject xsi:type="CTFormat +tedField" Type="xsd:string" FieldName="{Data.OWNER}"> <ObjectName>Fi +eld6</ObjectName> <FormattedValue>\</FormattedValue> <Value>\</Value> + </FormattedReportObject> <FormattedReportObject xsi:type="CTFormatte +dField" Type="xsd:string" FieldName="{Data.PATH}"> <ObjectName>Field +10</ObjectName> <FormattedValue>C:\abc\</FormattedValue> <Value>C:\ab +c\</Value> </FormattedReportObject> <FormattedReportObject xsi:type=" +CTFormattedField" Type="xsd:string" FieldName="{Data.NAMETYPE}"> <Ob +jectName>Field16</ObjectName> <FormattedValue>weru3453.log</Formatted +Value> <Value>weru3453.log</Value> </FormattedReportObject> <Formatte +dReportObject xsi:type="CTFormattedField" Type="xsd:string" FieldName +="{@DBS_FileSize}"> <ObjectName>Field15</ObjectName> <FormattedValue +>4</FormattedValue> <Value>4</Value> </FormattedReportObject> <Format +tedReportObject xsi:type="CTFormattedField" Type="xsd:string" FieldNa +me="{@DBS_DateAcc}"> <ObjectName>Field8</ObjectName> <FormattedValue +>12/12/2005</FormattedValue> <Value>12/12/2005</Value> </FormattedRep +ortObject> <FormattedReportObject xsi:type="CTFormattedField" Type="x +sd:string" FieldName="{@DBS_DateMod}"> <ObjectName>Field9</ObjectNam +e> <FormattedValue>12/12/2005</FormattedValue> <Value>12/12/2005</Val +ue> </FormattedReportObject> <FormattedReportObject xsi:type="CTForma +ttedField" Type="xsd:string" FieldName="{@DBS_DateCre}"> <ObjectName +>Field11</ObjectName> <FormattedValue>12/12/2005</FormattedValue> <Va +lue>12/12/2005</Value> </FormattedReportObject> </FormattedReportObj +ects> </FormattedSection> </FormattedSections> </FormattedArea> < +/FormattedAreaPair> <FormattedAreaPair Level="3" Type="Details"> <For +mattedArea Type="Details"> <FormattedSections> <FormattedSection Sect +ionNumber="0"> <FormattedReportObjects> <FormattedReportObject xsi:ty +pe="CTFormattedField" Type="xsd:string" FieldName="{Data.OWNER}"> <O +bjectName>Field6</ObjectName> <FormattedValue>\</FormattedValue> <Val +ue>\</Value> </FormattedReportObject> <FormattedReportObject xsi:type +="CTFormattedField" Type="xsd:string" FieldName="{Data.PATH}"> <Obje +ctName>Field10</ObjectName> <FormattedValue>C:\abc\</FormattedValue> +<Value>C:\abc\</Value> </FormattedReportObject> <FormattedReportObjec +t xsi:type="CTFormattedField" Type="xsd:string" FieldName="{Data.NAME +TYPE}"> <ObjectName>Field16</ObjectName> <FormattedValue>sdfsdfs.log +</FormattedValue> <Value>sdfsdfs.log</Value> </FormattedReportObject> + <FormattedReportObject xsi:type="CTFormattedField" Type="xsd:string" + FieldName="{@DBS_FileSize}"> <ObjectName>Field15</ObjectName> <Form +attedValue>4</FormattedValue> <Value>4</Value> </FormattedReportObjec +t> <FormattedReportObject xsi:type="CTFormattedField" Type="xsd:strin +g" FieldName="{@DBS_DateAcc}"> <ObjectName>Field8</ObjectName> <Form +attedValue>12/12/2005</FormattedValue> <Value>12/12/2005</Value> </Fo +rmattedReportObject> <FormattedReportObject xsi:type="CTFormattedFiel +d" Type="xsd:string" FieldName="{@DBS_DateMod}"> <ObjectName>Field9< +/ObjectName> <FormattedValue>12/12/2005</FormattedValue> <Value>12/12 +/2005</Value> </FormattedReportObject> <FormattedReportObject xsi:typ +e="CTFormattedField" Type="xsd:string" FieldName="{@DBS_DateCre}"> < +ObjectName>Field11</ObjectName> <FormattedValue>12/12/2005</Formatted +Value> <Value>12/12/2005</Value> </FormattedReportObject> </Formatte +dReportObjects> </FormattedSection> </FormattedSections> </Formatt +edArea> </FormattedAreaPair> <FormattedArea Type="Footer"> <Formatte +dSections> <FormattedSection SectionNumber="0"> <FormattedReportObjec +ts> <FormattedReportObject xsi:type="CTFormattedField" Type="xsd:stri +ng" FieldName="{@DBS_FileSizeSum_Typ}"> <ObjectName>Field24</ObjectN +ame> <FormattedValue>8</FormattedValue> <Value>8</Value> </FormattedR +eportObject> </FormattedReportObjects> </FormattedSection> </Forma +ttedSections> </FormattedArea> </FormattedAreaPair> <FormattedArea +Type="Footer"> <FormattedSections> <FormattedSection SectionNumber="0 +"> <FormattedReportObjects> <FormattedReportObject xsi:type="CTFormat +tedText"> <ObjectName>Text10</ObjectName> <TextValue>System Total</T +extValue> </FormattedReportObject> <FormattedReportObject xsi:type="C +TFormattedField" Type="xsd:string" FieldName="{@DBS_FileSizeSum_Sys}" +> <ObjectName>Field17</ObjectName> <FormattedValue>8</FormattedValue +> <Value>8</Value> </FormattedReportObject> </FormattedReportObjects +> </FormattedSection> </FormattedSections> </FormattedArea> </For +mattedAreaPair> <FormattedArea Type="Footer"> <FormattedSections> <Fo +rmattedSection SectionNumber="0"> <FormattedReportObjects> <Formatted +ReportObject xsi:type="CTFormattedText"> <ObjectName>Text11</ObjectN +ame> <TextValue>Report Total</TextValue> </FormattedReportObject> <Fo +rmattedReportObject xsi:type="CTFormattedField" Type="xsd:string" Fie +ldName="{@DBS_FileSizeSum_Rpt}"> <ObjectName>Field25</ObjectName> <F +ormattedValue>8</FormattedValue> <Value>8</Value> </FormattedReportOb +ject> </FormattedReportObjects> </FormattedSection> </FormattedSec +tions> </FormattedArea> </FormattedAreaPair> </FormattedReport>
Prints:
Subreport1 Subreport2 Field4 System lgloe040 System lgloe040 Field5 Type LOG Type LOG Field6 \ \ Field10 C:\abc\ C:\abc\ Field16 weru3453.log weru3 +453.log Field15 4 4 Field8 12/12/2005 12/12/2005 Field9 12/1 +2/2005 12/12/2005 Field11 12/12/2005 12/12/2005 Field6 \ \ Field10 C:\abc\ C:\abc\ Field16 sdfsdfs.log sdfsdf +s.log Field15 4 4 Field8 12/12/2005 12/12/2005 Field9 12/12/ +2005 12/12/2005 Field11 12/12/2005 12/12/2005 Field24 8 8 Text10 System Total Field17 8 8 Text11 Report Total Field25 8 8
Note that the original XML sample data seems to contain - characters between elements that give TreeBuilder grief. I've removed those.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: parsing xml file and get the values
by devlele (Novice) on Dec 15, 2005 at 16:17 UTC | |
by GrandFather (Saint) on Dec 15, 2005 at 16:45 UTC |