我使用的是Apache Xerces 3.0.1 XInclude。我想使用xinclude机制来包含XML文件。我在同一个目录中有三个XML文件。test_a.xml x包括test_b.xml,其中x包括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行,char 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>任何帮助都将不胜感激。
发布于 2010-01-07 09:33:15
据我所知,您的XML是好的,但我不会声称这是最后的结论。
我猜您在Xerces的XInclude处理中遇到了一个bug。我注意到,虽然这段代码已经有近三年的历史了,但它显然不是released until Xerces 3.0,所以它可能相对未经测试。(考虑到在XInclude中处理base URIs of included documents的方式,这里出现错误的可能性似乎大于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上确实有a similar bug。(我认为它描述了同样的问题,但报告中的措辞听起来像是在使用相对路径时,即使是包含单个层也会失败。)
https://stackoverflow.com/questions/2017318
复制相似问题