Seite 1 von 1

lxml XInclude findet File nicht...

Verfasst: Montag 28. März 2011, 08:38
von m0ps1234
Tag zusammen,
ich stehe hier gerade vor einem Problem und weiß nicht woran es liegt:
Ich möchte ein XML parsen, welches ein xInclude enthält und danach dieses mittels RelaxNG validieren.
Hier ein Ausschnitt aus dem Parser:

Code: Alles auswählen

def pLXML(self, completeXMLContentAsString, xInclude=True):
        xmlDoc = etree.parse(StringIO.StringIO(completeXMLContentAsString))
        if xInclude:
            xmlDoc.xinclude()
        ...
Das XML wird aus der Datei ausgelesen und als String der Funktion übergeben.
Mein XML sieht folgendermaßen aus und liegt im Verzeichnis: .../Beispiel/abc/test.xml:

Code: Alles auswählen

<Test xmlns:xi="http://www.w3.org/2001/XInclude" attributBeispiel="xyz">
            
	<documentation>
			BlaBla
	</documentation>
        <xi:include href="../abc/xyz.xml" parse="xml"/>
        ...
</Test>        
(ANMERKUNG: Das Element "Test" beinhaltet noch weitere Attribute und NS, habe ich nur zur ÜBersichtlichkeit weggelassen!)

So, wenn ich nun mein Programm aufrufe mit dem Pfad zu der Test.xml (z.B. "C:/programm/meinProg/Beispiel/abc/Test.xml"), dann wirft er mir den Fehler :
XInclude Error: failed to load external entity "../abc/xyz.xml".

Wenn ich im XInclude aber den Pfad "C:/programm/meinProg/Beispiel/abc/xyz.xml" angebe, dann lädt er es.
Ich weiß jedoch, dass es auch mit dem relativen Pfad gehen muss. Jedoch weiß ich nicht warum er es bei mir ablehnt...
Habt ihr einen Vorschlag?

Grüße
m0ps

Re: lxml XInclude findet File nicht...

Verfasst: Montag 28. März 2011, 09:21
von m0ps1234
Scheint als hätte es sich geklärt. Man darf die Datei nicht als Inhalt sondern einfach als Datei übergeben. Irgendwie ja logisch...