XercesDOMParser和XIncludes

时间:2010-01-28 15:57:30

标签: c++ xml xerces xinclude

我试图让xincludes在现有系统中工作,该系统在xercesc中使用XercesDOMParser来解析来自客户端的传入xml。我正在使用Apache Xercesc v3.0.1,从输入流中读取的传入XML是:

<?xml version="1.0" encoding="UTF-8"?>
<VisionServer xmlns:xi="http://www.w3.org/2001/XInclude">
    <CompositeObject>
 <xi:include href="testguioutput.xml" />

    

而testguioutput.xml包含

<?xml version="1.0" encoding="UTF-8"?>
<GUIOutput>
    <Input>Input</Input>
    <Title>IDC2_1</Title>
</GUIOutput>

现有代码使用XercesDOMParser周围的包装器来解析XML,并且在使用setDoNamespaces和setDoXInclude为true之后,它正在尝试解析XInclude,但是我得到了一个持久的“致命:包含失败而没有在文档“{0}”中找到的回退元素错误,无论我在目录结构中的哪个位置放入testguioutput.xml。

我在visualstudio 2008下工作,我的工作目录是默认的,并且用完了/ project / debug,但无论目标文件是在/ project /还是/ project / debug /中,include都会失败。

1 个答案:

答案 0 :(得分:0)

我能够使用Xerces应用程序附带的XInclude.exe示例应用程序扩展xinclude标记。为此,我使用上面的文件创建了两个文件:

test1.xml:

<?xml version="1.0" encoding="UTF-8"?>
<VisionServer xmlns:xi="http://www.w3.org/2001/XInclude">
  <CompositeObject>
    <xi:include href="test2.xml"/>
  </CompositeObject>
</VisionServer>

test2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<GUIOutput>
  <Input>Input</Input>
  <Title>IDC2_1</Title>
</GUIOutput>

在我执行的命令行中:

“XInclude.exe test1.xml test1_expanded.xml”没有引号。

生成的test1_expanded.xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<VisionServer xmlns="" xmlns:xi="http://www.w3.org/2001/XInclude">
  <CompositeObject>
    <GUIOutput xml:base="test2.xml">
      <Input>Input</Input>
      <Title>IDC2_1</Title>
    </GUIOutput>
  </CompositeObject>
</VisionServer>