サンプルXSDが「エラー:要素Xの宣言が見つかりません」で失敗する

StackOverflow https://stackoverflow.com/questions/6393689

質問

xml解析の分野ではまったくの初心者であるにもかかわらず、xsdを生成して、有効なc++を作成し、コンパイルとリンクを正常に行うことができましたが、コンパイラーはインスタンス化を最適化しました(?)。そこで、ステップ1から始めて、 helloを試してみます。 CodeSynthesisでのworld xmlの例。しかし、それは失敗します: ジェネラコディセタグプレ

hello.c ++: ジェネラコディセタグプレ

hello.xml: ジェネラコディセタグプレ

hello.xsd: ジェネラコディセタグプレ

これはまさにその通りだと思いますが、コマンドは文書化されているとおりには機能しません。私は、xsdcxxが正しいことをしているように見えることを発見しました(C#またはvb.net出力を生成するxsdとは異なります)。 ジェネラコディセタグプレ

また、-I(dir)は含まれていませんが、正常にコンパイルされます。どういうわけか間違ったインクルードファイルを使用している可能性がありますか?

何が間違っているのですか?たぶん、xsdは適切なツールではありませんか?

役に立ちましたか?

解決

個人的には、Pythonとlxmlの組み合わせは非常に貴重だと思います。XMLドキュメントと対応するXMLスキーマは問題なく機能します: ジェネラコディセタグプレ

エラーは発生しませんでした。ただし、lxmlは指定したスキーマをロードするためxsi:noNamespaceSchemaLocationを使用する必要はありませんが、名前空間を使用していない限り、それを使用する必要があります。1つのXMLパーサーが柔軟であるという理由だけで、他のパーサーはそうではない可能性があります。これは、難しい方法を理解したように思われるという事実です。名前空間を使用する場合は、xsi:noNamespaceSchemaLocationの代わりにxsi:schemaLocationを使用してください。また、xsi:*属性を使用できるようにするには、xmlns:xsi属性を介してxsi名前空間を宣言する必要があることに注意してください。

xsi:noNamespaceSchemaLocationを使用した例: ジェネラコディセタグプレ

他のヒント

いくつかのオプションがあります。スキーマの場所は、ファイル hello.xml で指定できます: ジェネラコディセタグプレ

もう1つのオプションは、ファイル内のスキーマの場所を指定することです hello.c ++

スキーマファイルがファイルパス /some/file/path/hello.xsd にあると仮定した場合

書く代わりに ジェネラコディセタグプレ

書き込み ジェネラコディセタグプレ

これについて詳しくは、コード合成に関するよくある質問をご覧ください:

なぜ取得するのか有効なXMLドキュメントを解析しようとすると、「エラー:要素 'root-element'の宣言が見つかりません」

編集:この回答は無視してください。コメントは保存する価値があるので、残しておきます。 <ストライク> XSDの内容: ジェネラコディセタグプレ

しかし、XMLには次のように書かれています: ジェネラコディセタグプレ

おそらくXSDは次のようになります: ジェネラコディセタグプレ

また、XMLには xsi:schemaLocation 宣言がありません。持っていると役立つかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top