题
我正在使用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。 (我认为这是在描述同一问题,但是报告中的措辞听起来像是 单身的 使用相对路径时,包含层将失败。)