I wanted to print all elements and their attributes names and values from an XML file.
<UTILITYBILLS>
<BillingMessage>Bill Message TEST</BillingMessage>
<StubMessage>Stub Message TEST</StubMessage>
<PaymentCodeID>34</PaymentCodeID>
<DueDate>08/01/2016</DueDate>
<ScheduledPrintDate>07/04/2016</ScheduledPrintDate>
<ActualPrintDate>07/07/2016</ActualPrintDate>
<ActualPrintTime>9:37 AM</ActualPrintTime>
<BILL AccountNumber="0390124-000" AccountType="Mayesville- Residential" UtilityAccountID="14242">
<ConsumptionHistory>dfgdfg</ConsumptionHistory>
<SERVICE Service=""/>
<BILLINGITEMS BillingItemCode=""/>
<CHARGES ChargeCategoryDescription="MAYESEVILLE CHARGES" Amount="70.09" Parent="1"/>
<CHARGES ChargeCategoryDescription="MA - WATER" Amount="43.04" Parent="0">
<LineItemDetail UtilityTransDetailID="6605683" ComponentType="Flat Rate" ComponentDescription="WATER MIN"/>
<LineItemDetail UtilityTransDetailID="6606886" ComponentType="Block Rate" ComponentDescription="WATER CONS">
<LIDetailConsumption MeterNumber="36313595" MeterType="Water & Sewer 9" ServiceClassCode="Water & Sewer" MeasurementTypeSequence="1"/>
</LineItemDetail>
<LineItemDetail UtilityTransDetailID="6606890" ComponentType="Block Rate" ComponentDescription="WATER CONS">
<LIDetailConsumption MeterNumber="36313595" MeterType="Water & Sewer 9" ServiceClassCode="Water & Sewer" MeasurementTypeSequence="1"/>
</LineItemDetail>
</CHARGES>
<CHARGES ChargeCategoryDescription="MA - SEWER" Amount="27.05" Parent="0">
<LineItemDetail UtilityTransDetailID="6605685" ComponentType="Flat Rate" ComponentDescription="SEWER MINIMUM"/>
<LineItemDetail UtilityTransDetailID="6606894" ComponentType="Block Rate" ComponentDescription="SEWER CONS">
<LIDetailConsumption MeterNumber="36313595" MeterType="Water & Sewer 9" ServiceClassCode="Water & Sewer" MeasurementTypeSequence="1"/>
</LineItemDetail>
</CHARGES>
<CONSUMPTION ServiceClass="Water & Sewer" MeterType="Water & Sewer 9" MeterNumber="36313595"/>
</BILL>
<BILL AccountNumber="0390124-000" AccountType="Mayesville- Residential" UtilityAccountID="14242">
<ConsumptionHistory>dfgdfg</ConsumptionHistory>
<SERVICE Service=""/>
<BILLINGITEMS BillingItemCode=""/>
<CHARGES ChargeCategoryDescription="MAYESEVILLE CHARGES" Amount="70.09" Parent="1"/>
<CHARGES ChargeCategoryDescription="MA - WATER" Amount="43.04" Parent="0">
<LineItemDetail UtilityTransDetailID="6605683" ComponentType="Flat Rate" ComponentDescription="WATER MIN"/>
<LineItemDetail UtilityTransDetailID="6606886" ComponentType="Block Rate" ComponentDescription="WATER CONS">
<LIDetailConsumption MeterNumber="36313595" MeterType="Water & Sewer 9" ServiceClassCode="Water & Sewer" MeasurementTypeSequence="1"/>
</LineItemDetail>
<LineItemDetail UtilityTransDetailID="6606890" ComponentType="Block Rate" ComponentDescription="WATER CONS">
<LIDetailConsumption MeterNumber="36313595" MeterType="Water & Sewer 9" ServiceClassCode="Water & Sewer" MeasurementTypeSequence="1"/>
</LineItemDetail>
</CHARGES>
<CHARGES ChargeCategoryDescription="MA - SEWER" Amount="27.05" Parent="0">
<LineItemDetail UtilityTransDetailID="6605685" ComponentType="Flat Rate" ComponentDescription="SEWER MINIMUM"/>
<LineItemDetail UtilityTransDetailID="6606894" ComponentType="Block Rate" ComponentDescription="SEWER CONS">
<LIDetailConsumption MeterNumber="36313595" MeterType="Water & Sewer 9" ServiceClassCode="Water & Sewer" MeasurementTypeSequence="1"/>
</LineItemDetail>
</CHARGES>
<CONSUMPTION ServiceClass="Water & Sewer" MeterType="Water & Sewer 9" MeterNumber="36313595"/>
</BILL>
<BILL AccountNumber="0390124-000" AccountType="Mayesville- Residential" UtilityAccountID="14242">
<ConsumptionHistory>dfgdfg</ConsumptionHistory>
<SERVICE Service=""/>
<BILLINGITEMS BillingItemCode=""/>
<CHARGES ChargeCategoryDescription="MAYESEVILLE CHARGES" Amount="70.09" Parent="1"/>
<CHARGES ChargeCategoryDescription="MA - WATER" Amount="43.04" Parent="0">
<LineItemDetail UtilityTransDetailID="6605683" ComponentType="Flat Rate" ComponentDescription="WATER MIN"/>
<LineItemDetail UtilityTransDetailID="6606886" ComponentType="Block Rate" ComponentDescription="WATER CONS">
<LIDetailConsumption MeterNumber="36313595" MeterType="Water & Sewer 9" ServiceClassCode="Water & Sewer" MeasurementTypeSequence="1"/>
</LineItemDetail>
<LineItemDetail UtilityTransDetailID="6606890" ComponentType="Block Rate" ComponentDescription="WATER CONS">
<LIDetailConsumption MeterNumber="36313595" MeterType="Water & Sewer 9" ServiceClassCode="Water & Sewer" MeasurementTypeSequence="1"/>
</LineItemDetail>
</CHARGES>
<CHARGES ChargeCategoryDescription="MA - SEWER" Amount="27.05" Parent="0">
<LineItemDetail UtilityTransDetailID="6605685" ComponentType="Flat Rate" ComponentDescription="SEWER MINIMUM"/>
<LineItemDetail UtilityTransDetailID="6606894" ComponentType="Block Rate" ComponentDescription="SEWER CONS">
<LIDetailConsumption MeterNumber="36313595" MeterType="Water & Sewer 9" ServiceClassCode="Water & Sewer" MeasurementTypeSequence="1"/>
</LineItemDetail>
</CHARGES>
<CONSUMPTION ServiceClass="Water & Sewer" MeterType="Water & Sewer 9" MeterNumber="36313595"/>
</BILL>
</UTILITYBILLS>
The above file is sample.xml
I am trying to get every element, its value and every child and sub child and their values.
Here is my code.
use XML::LibXML;
my $file = "sample.xml";
my $parser = XML::LibXML->new();
my $xmldoc = $parser->parse_file($file);
for my $sample ( $xmldoc->getElementsByTagName('UTILITYBILLS') ) {
for my $property ( $sample->findnodes('./*') ) {
print OUT $property->nodeName(), ": ", $property->textContent(), "\n";
my @attributeslist = $property->attributes();
foreach my $value (@attributeslist) {
my $string = $value->getValue();
print OUT $value->nodeName(), ": ", "$string", "\n";
}
}
}
The output of my code is as follows:
BillingMessage: Bill Message TEST
StubMessage: Stub Message TEST
PaymentCodeID: 34
DueDate: 08/01/2016
ScheduledPrintDate: 07/04/2016
ActualPrintDate: 07/07/2016
ActualPrintTime: 9:37 AM
BILL:
dfgdfg
AccountNumber: 0390124-000
AccountType: Mayesville- Residential
UtilityAccountID: 14242
BILL:
dfgdfg
AccountNumber: 0390124-000
AccountType: Mayesville- Residential
UtilityAccountID: 14242
BILL:
dfgdfg
AccountNumber: 0390124-000
AccountType: Mayesville- Residential
UtilityAccountID: 14242
I wanted the output like as follows
BillingMessage: Bill Message TEST
StubMessage: Stub Message TEST
PaymentCodeID: 34
DueDate: 08/01/2016
ScheduledPrintDate: 07/04/2016
ActualPrintDate: 07/07/2016
ActualPrintTime: 9:37 AM
BILL:
ConsumptionHistory: dfgdfg
AccountNumber: 0390124-000
AccountType: Mayesville- Residential
UtilityAccountID: 14242
And all sub child attributes and it's value
.
.
.
BillingMessage: Bill Message TEST
StubMessage: Stub Message TEST
PaymentCodeID: 34
DueDate: 08/01/2016
ScheduledPrintDate: 07/04/2016
ActualPrintDate: 07/07/2016
ActualPrintTime: 9:37 AM
BILL:
ConsumptionHistory: dfgdfg
AccountNumber: 0390124-000
AccountType: Mayesville- Residential
UtilityAccountID: 14242
And all sub child attributes and it's value
.
.
.
Please help me to resolve this.