XercesDOMParser и XIncludes - PullRequest
       21

XercesDOMParser и XIncludes

3 голосов
/ 28 января 2010

Я пытаюсь заставить xinclude работать в существующей системе, которая использует XercesDOMParser в xercesc для анализа входящего 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, но я получаю постоянный «Fatal: include fail и no Ошибка элемента найдена в документе «{0}», независимо от того, где в структуре каталогов я поместил testguioutput.xml.

Я работаю в Visualstudio 2008, мой рабочий каталог по умолчанию и заканчивается / project / debug, но включение завершается ошибкой, независимо от того, находится ли целевой файл в / project / или /project/debug/.

1 Ответ

0 голосов
/ 01 февраля 2010

Мне удалось развернуть теги xinclude с помощью примера приложения XInclude.exe, которое входит в состав приложения Xerces. Для этого я создал два файла, используя ваши файлы выше:

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>
...