xerces xinclude错误

问题描述:

我正在使用Apache Xerces 3.0.1 XInclude。我想使用xinclude机制来包含XML文件。我有三个XML文件都在同一个目录中。 test_a.xml x包含test_b.xml,其中包含test_c.xml。当我只有test_a.xml xinclude test_b.xml时,它可以工作。但是,当我有test_b.xml xinclude test_c.xml时,出现以下命令行错误:xerces xinclude错误

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> 

任何帮助,将不胜感激。

据我所知,你的XML是好的,但我不会说这是最后一个字。

这是我的猜想您在Xerces的XInclude处理中遇到了一个错误。我注意到虽然这段代码差不多三年了,但它显然不是released until Xerces 3.0,所以它可能相对未经测试。 (并且考虑到在XInclude中处理base URIs of included documents的方式,这里出现bug的可能性看起来好像大于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> 

UPDATE:确实是有a similar bug在apache.org。 (我认为它描述了相同的问题,但报告中的措词使得听起来像甚至是一个单个包含层将在使用相对路径时失败。)

+0

感谢Dan。我能够获得单层包容以正常工作。我想我可以等到他们修复这个错误。 – sizzle 2010-01-11 17:04:46