Hi zusammen,
das Problem ist so verworren, dass ich nicht so recht weiß wonach ich suchen sollte,
daher bitte nicht böse sein, wenn es diese Frage so oder so ähnlich schon gab und ich
die nur nciht gefunden habe.
Nun zum Problem:
Ich habe aus einer XSD mit Delphi automatisch eine
PAS-Datei erzeugen lassen.
Dort wird in der
XML-Datei mit Namespaces gearbeitet.
Unterknoten sind allgemein definiert in einer anderen XSD ohne Namespace.
Bei folgendem Abschnitt bekomme ich nun Probleme:
Code:
<toller_namespace:Ansprechpartner>
<Person>
<Eine_ID>4711</Eine_ID>
<Vorname>Max</Vorname>
<Nachname>Mustermann</Nachname>
</Person>
</toller_namespace:Ansprechpartner>
Delphi erzeugt eine Get-Funktion:
Delphi-Quellcode:
function TXMLAnsprechpartner.Get_Person: IXMLPerson;
begin
Result := ChildNodes['Person'] as IXMLPerson;
end;
Ich bekomme auch ein Objekt zurück, aber "Vorname" ist beispielsweise leer.
Nun habe ich herausgefunden, wenn ich manuell den Knoten suche (ChildNodes - Get(index) - NodeName)
finde ich ihn und dort sind die Werte enthalten.
FindNode findet den Knoten nicht, da er sich nicht im "richtigen" Namespace befindet.
Mein Versuch den Knoten manuell zu suchen und
1) den direkt zuzuweisen oder
2) einen neuen Knoten erstellen und die Werte einzelnd übernehmen
sind beide gescheitert.
Nr. 1 ging nicht, da der Typ nicht passte. Nr. 2 ging nicht, da ich durch das hin und her schieben
wohl den Referenzzähler versaue und er dann beim späteren Zugriff auf Zugriffsverletzungen läuft
(zumindest denke ich, dass ich den Referenzzähler versaue).
Die Frage ist also: Gibt es für den Fall, dass Unterknoten keinen oder einen anderen
Namespace haben, eine Lösung in Delphi? Ist das ein Fehler des XSD-Parsers?
Hatte außer mir noch jemand mal solch ein Problem und wie habt ihr das dann gelöst?
Mit freundlichem Gruß
Incocnito