0

我正在使用 Apache Xerces 3.0.1 XInclude。我想使用 xinclude 机制来包含 XML 文件。我在同一个目录中有三个 XML 文件。test_a.xml xincludes test_b.xml 其中 xincludes test_c.xml。当我只有 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 处理中遇到了一个错误。我注意到虽然这段代码已经有将近三年的历史,但它显然直到 Xerces 3.0 才发布,所以它可能相对未经测试。(考虑到在 XInclude 中处理包含文档的基本 URI 的方式,这里出现错误的可能性似乎大于 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 回答