17

ユーザーが入力したクエリを使用してDBUnitXMLデータセットを生成する簡単なツールを作成しました。XMLに入力された各クエリをコメントとして含めたいのですが、XMLファイルを生成するDBUnit APIは、必要な場所(生成されるデータの上)にコメントを挿入することをサポートしていないため、上部または下部にすべてのクエリを付けてコメントします。

だから私の質問:どちらかの場所に配置することは有効なXMLですか?たとえば、XML宣言の上:

<!-- Queries used: ... -->
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  ...
</dataset>

またはルートノードの下:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  ...
</dataset>
<!-- Queries used: ... -->

私は最初にXML宣言の上で試す予定ですが、ウィキペディアからの主張にもかかわらず、それが有効なXMLであるかどうかについては疑問があります。

コメントは、要素のコンテンツがテキストまたは#PCDATAの場合はテキストを含め、ツリーのどこにでも配置できます。

これが機能する場合は投稿する予定ですが、それが公式のXML標準であるかどうかを知っておくと便利です。

更新:私のテストの結果については、以下の私の応答を参照してください。

4

4 に答える 4

16

XML仕様によると、整形式のXMLドキュメントは次のとおりです。

document ::= prolog element Misc*

どこにprologありますか

prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?

そしてMisc_

Misc ::= Comment | PI | S

XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

つまり、上部にコメントを付けたい場合は、XML型宣言を付けることはできません。

ただし、コメントを含めることができるため、宣言の後で、ドキュメント要素の外側(ドキュメントの上部または下部)にMisc*コメントを含めることができます。

仕様はコメントに関してウィキペディアに同意します:

2.5コメント

[定義:コメントは、他のマークアップ以外のドキュメントのどこにでも表示される可能性があります。さらに、それらは、文法で許可されている場所の文書型宣言内に表示される場合があります。これらはドキュメントの文字データの一部ではありません。XMLプロセッサは、アプリケーションがコメントのテキストを取得できるようにすることができますが、必ずしもそうする必要はありません。互換性のために、文字列 "-"(ダブルハイフン)をコメント内に配置してはなりません。]パラメータエンティティ参照をコメント内で認識してはなりません。

これはすべて、コメントでリードする場合にXML宣言を作成できないことを除いて、他のマークアップ内にない場所にコメントを配置できることを意味します。

ただし、理論的には理論は実践と一致しますが、実際にはそうではないので、あなたの実験がどのように機能するかを知りたいと思います。

于 2008-09-08T22:19:32.740 に答える
4

最初の例は有効なXMLではありません。宣言は、XMLドキュメントの最初のものである必要があります。

しかし、それ以外に、コメントは他のどこにでも行くことができます。

最初の例を修正する:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Queries used: ... -->
<dataset>
</dataset>
于 2008-09-08T22:21:48.193 に答える
2

みなさん、ありがとうございました!

結局のところ、ファイルの前のコメントは機能しているように見えましたが、DBUnitソースを調べたところ、検証がオフになっているためです。

私は次の方法で簡単なドキュメントの読み込みを試みました:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("/path/to/file"));

XML宣言が最初のものではないため、これは例外で失敗します(他の人が示しているように)。

したがって、DBUnitは機能しますが、有効なXMLが必要なので、コメントを最後に移動しました(DBUnitはXML宣言を生成するため、その下にコメントを配置することはできません。 。少なくとも事後にXMLを変更しない限り、それは価値があるよりも多くの作業になるでしょう)。

于 2008-09-08T23:50:55.000 に答える
2

処理命令は、XMLコンテンツの最初のものでなければなりません(XMLコメント処理命令を参照)。以下が機能するはずです。

<?xml version='1.0' encoding='UTF-8'?>
<!-- Queries used: ... -->
<dataset>
  ...
</dataset>
于 2008-09-08T22:26:39.617 に答える