일부 XML을 Perl로 구문 분석하려고하지만 테스트에서 기대하는 바가 없습니다.perl XML :: 간단한 속성 blank
$buffer = qq[<DeliveryReport><message id="msgID" sentdate="xxxxx" donedate="xxxxx" status="xxxxxx" gsmerror="0" /></DeliveryReport>];
$xml = XML::Simple->new(ForceArray => 1);
$file = $xml->XMLin($buffer) or die "Failed for $reply: $!\n";
use Data::Dumper;
print Dumper($file);
$msgid = $file->{message}->{id};
$message_status = $file->{message}->{status};
print "OUTPUT: $msgid $message_status";
하지만 출력은 비어 있고 print Dumper
잘못 관련 ID 속성을 보이지만, 그 이유를 모르겠어요.
$VAR1 = {
'message' => {
'msgID' => {
'status' => 'xxxxxx',
'gsmerror' => '0',
'sentdate' => 'xxxxx',
'donedate' => 'xxxxx'
}
}
};
OUTPUT : 여기
가 제대로 작동 최종 코드입니다.
use XML::Simple;
use Data::Dumper;
$xml = XML::Simple->new (KeyAttr=>'',ForceArray => 1);
$file = $xml->XMLin('
<DeliveryReport>
<message id="msgID1" sentdate="xxxxx" donedate="xxxxx" status="xxxxxx" gsmerror="0" />
<message id="msgID2" sentdate="yyy" donedate="yyy" status="yyy" gsmerror="0" />
</DeliveryReport>
') or die "Failed for $reply: $!\n";
print Dumper($file);
$numOfMsgs = @{$file->{message}};
print "<br /><br />I've received $numOfMsgs records<br />";
for($i = 0; $i < $numOfMsgs; $i++) {
$msgid = $file->{message}->[$i]->{id};
$message_status = $file->{message}->[$i]->{status};
print "message id: [$msgid]<br />";
print "status id: [$message_status]<br />";
print "<br />";
}
그들은 형식은 다음과 같이 말한다 : <메시지 ID = "MSGID"sentdate =이 donedate = "xxxxx는"상태 = "XXXXXX"gsmerror = "0"/ "xxxxx는">를 ... .. DeliveryReport> 나는 이것을 선택하기 위해 msgID를 모른다. –
dannix
"id"를 접는 문제를보다 잘 해결할 수 있도록 답변을 업데이트했습니다. – Ben
그게 문제를 해결하는 것처럼 보이지만 하나의 메시지 만 있으면 아무런 배열도 없어 오래 작동하지 않습니다. ForceArray => 1을 추가하면 그 부분이 수정되었습니다. 그래서 얼마나 많은 레코드를 가지고 있는지를 알 수있는 방법이 필요합니다. 꺼짐을 선택하여 문서를 확인합니다. – dannix