【问题标题】:xerces xinclude errorxerces xinclude 错误
【发布时间】:2010-01-07 00:14:01
【问题描述】:

我正在使用 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>

任何帮助将不胜感激。

【问题讨论】:

    标签: c++ xml xerces xinclude


    【解决方案1】:

    据我所知,您的 XML 没问题,但我不会声称自己是这方面的最后决定。

    我的猜测是您在 Xerces 的 XInclude 处理中遇到了一个错误。我注意到虽然这段代码已经快三年了,但它显然不是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。 (我认为它描述了同样的问题,但报告中的措辞听起来好像使用相对路径时即使是单层包含也会失败。)

    【讨论】:

    • 谢谢丹。我能够获得单层包含以正常运行。我想我可以等到他们修复错误。
    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多