3

perlスクリプトにオンラインからXxmlファイルを取得させ、XSDファイルに従って検証させようとしています。

これを行うためのコードは次のとおりです。

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 $@ if $@;

これを実行すると、「要素のcropdataコンテンツチェックに失敗しました」という不可解なエラーが発生します(cropdataは私の非ルートタグの最初のものです)。

私のXSDファイルでは、エントリは次のようになります。

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

<xs:element..../次に、「 >」の束、そして:

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

perlデバッガーに入ると、行"my $doc = $parser->parse_string($file);"を実行した後、$docはXML:: LibXML :: Document = SCALAR(0x6b99f0)として出力されることがわかります。

誰かが私が間違っていることに光を当てるのを手伝ってもらえますか?(警告:それはばかげた間違いかもしれません、私はそれを自分自身の前に置きません)。

4

1 に答える 1

0

私が提供したサンプルxmlファイルが無効であることが判明しました。xmllintでチェックして修正すると、すべてが機能します。

于 2010-12-23T23:11:27.957 に答える