2010-08-03 3 views
3

내 perl 스크립트가 온라인에서 Xxml 파일을 가져 와서 XSD 파일에 따라 유효성을 검사하려고합니다.libxml 및 XSD 파일로 Perl에서 XML 유효성 확인

my $url = shift @ARGV; 
my $response = $ua->get($url) || die "Can't fetch file"; 
my $file = $response->content; 

my $schema_file = "schema.xsd"; 
my $schema = XML::LibXML::Schema->new(location => $schema_file); 
my $parser = XML::LibXML->new; 
my $doc = $parser->parse_string($file); 
eval { $schema->validate($doc) }; 
die [email protected] if [email protected]; 

을이이 암호 같은 오류가 발생합니다 실행 : "요소 cropdata 콘텐츠 확인 실패를"(cropdata 내 비 루트 태그의 첫 번째) 다음과 같이

이 작업을 수행하는 코드입니다.

</xs:sequence> 
</xs:complexType> 
</xs:element> 

는 펄 디버거로 가는데 후이를시키는 것을 보여줍니다 그런 다음

<xs:element name="cropdata"> 
<xs:complexType> 
<xs:sequence> 

다음 "<xs:element..../>" 과의 무리 :처럼 내 XSD 파일에서

는 항목이 보인다 line "my $doc = $parser->parse_string($file);"을 실행하면 $ doc은 XML :: LibXML :: Document = SCALAR (0x6b99f0)로 인쇄됩니다.

누구든지 내가 뭘 잘못하고 있는지 밝힐 수 있습니까? (경고 : 그것은 바보 같은 실수 일 수 있습니다.

+1

'Use Data :: Dumper; Dumper ($ doc);'parse_string 호출 바로 다음에 - $ doc 객체가 올바르게 보이나요? – Ether

+0

@Ether, $ doc는 거의 확실하게 C 데이터 구조의 메모리 주소 인 숫자에 대한 스칼라 심판이 될 것입니다. –

+2

입력 XML의 모양은 무엇입니까? 스키마별로 유효합니까? –

답변

0

내가 제공 한 샘플 xml 파일이 유효하지 않으며 xmllint에서 검사하고 수정하면 모든 것이 작동 함을 알 수 있습니다.