我正在使用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.a.xml test_z.xml Parse parse test_a.xml进行进展... file c: digital_receiver digital_receiver 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>

任何帮助,将不胜感激。

有帮助吗?

解决方案

据我所知,您的XML还可以,但我不会声称这是有关此的最后一句话。

是我的 猜测 您正在Xerces的Xinclude处理中遇到一个错误。我注意到,虽然该代码已经快三年了,但显然不是 释放直到Xerces 3.0, ,因此可能相对未经测试。 (并以此方式 包括文档的基本乌里斯 在Xinclude中处理,这里的错误可能大于0。

作为解决方法,我建议您执行错误消息建议:在uris中为随附的文件添加一个方案。不幸的是,对于文件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。 (我认为这是在描述同一问题,但是报告中的措辞听起来像是 单身的 使用相对路径时,包含层将失败。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top