2010-01-28 24 views
3

J'essaie de faire fonctionner xincludes dans un système existant qui utilise XercesDOMParser dans xercesc pour analyser le xml entrant d'un client. Je travaille avec Apache Xercesc v3.0.1, et le XML entrant, lu à partir d'un flux d'entrée, est la suivante:XercesDOMParser et XIncludes

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

tout testguioutput.xml contient

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

Le code existant utilise un wrapper autour d'un XercesDOMParser pour analyser le XML à mesure qu'il entre, et après avoir utilisé setDoNamespaces et setDoXInclude à true, il tente d'analyser XInclude, mais j'obtiens un élément persistant "Fatal: include failed and no fallback" {0} '' erreur, peu importe où dans la structure du répertoire j'ai mis testguioutput.xml. Je travaille sous Visualstudio 2008, mon répertoire de travail est par défaut, et court de/project/debug, mais l'inclusion échoue si le fichier cible est dans/project/ou/project/debug /.

Répondre

0

J'ai été capable d'étendre les balises xinclude à l'aide de l'exemple d'application XInclude.exe fourni avec l'application Xerces. Pour ce faire, j'ai créé deux fichiers en utilisant vos fichiers ci-dessus:

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> 

Sur la ligne de commande I exécuté:

"XInclude.exe test1.xml test1_expanded.xml" sans guillemets

Le fichier résultant 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> 
+0

Je pense que le problème peut être que je ne traite pas avec le chargement test1.xml d'un fichier, je reçois ce à partir d'un flux d'entrée. Cela peut signifier qu'il n'a pas de contexte à partir duquel charger test2.xml, mais je ne sais pas comment résoudre ce problème. – NinjaDebugger

+1

C'est une grosse omission. Pourquoi ne publiez-vous pas votre code? – lavinio