【发布时间】:2016-07-22 10:53:13
【问题描述】:
我想从 XML 文件中打印所有元素及其属性名称和值。
<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>
上面的文件是sample.xml我正在尝试获取每个元素、它的值以及每个子元素和子子元素及其值。
这是我的代码。
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";
}
}
}
我的代码输出如下:
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
我想要如下输出
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
.
.
.
请帮我解决这个问题。
【问题讨论】:
标签: xml perl xml-parsing xml-libxml