0

Apache Xerces 3.0.1 XInclude を使用しています。xinclude メカニズムを使用して XML ファイルをインクルードしたいと考えています。同じディレクトリに 3 つの XML ファイルがあります。test_a.xml は、test_c.xml を xinclude する test_b.xml を xinclude します。test_a.xml xinclude test_b.xml があれば、うまくいきます。ただし、test_b.xml xinclude test_c.xml があると、次のコマンド ライン エラーが発生します。

C:\digital_receiver\test>XInclude.exe test_a.xml test_z.xml 解析中の test_a.xml ...ファイル C:\digital_receiver\test/test_a.xml、行 3、文字 34 で致命的なエラー メッセージ: スキームが見つかりませんURIで終了しました。

test_a.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<test_a xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="test_b.xml"/>
</test_a>

test_b.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<test_b xmlns:xi="http://www.w3.org/2001/XInclude">
  <ch>5</ch>
  <xi:include href="test_c.xml"/>
</test_b>

test_c:xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<test_c>
  <channel>1</channel>
</test_c>

どんな助けでも大歓迎です。

4

1 に答える 1

0

私が知る限り、あなたの XML は問題ありませんが、これが最後の言葉だとは言いません。

Xerces の XInclude 処理でバグが発生していると思います。このコードはほぼ 3 年前のものですが、明らかにXerces 3.0 までリリースされていないため、比較的テストされていない可能性があります。(そして、含まれるドキュメントのベース URI がXInclude で処理される方法を考えると、ここでバグが発生する可能性は 0 より大きいようです。)

回避策として、エラー メッセージが示唆することを実行することをお勧めします。インクルード ファイルの URI にスキームを追加します。残念ながら、ファイル URI の場合、これは絶対 URI を使用する必要があることも意味します。

test_a.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<test_a xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="file://path/to/directory/test_b.xml"/>
</test_a>

test_b.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<test_b xmlns:xi="http://www.w3.org/2001/XInclude">
  <ch>5</ch>
  <xi:include href="file://path/to/directory/test_c.xml"/>
</test_b>

更新: 実際、 apache.orgにも同様のバグがあります。(同じ問題を説明していると思いますが、レポートの文言は、相対パスを使用すると、単一の包含層でさえ失敗するように聞こえます。)

于 2010-01-07T01:33:14.560 に答える