Hallo,
Als Alternative zu
meinem anderen Thread möchte ich den
XML-Datenbindungs-Experten probieren. War ja völlig an mir vorbeigegangen, daß der auf einmal in der PRO-Version schon dabei ist
.
Die xsd wird importiert und die
pas erstellt, soweit ist alles ok. Erstellen oder Auslesen der
XML geht schnell und übersichtlich, ein TRAUM
.
Der Aufruf sieht dann in etwa so aus:
Delphi-Quellcode:
xmltest:=NewKnownTrackingRequest;
xmltest.Request.ServiceHeader.SiteID := LabeledEdit_SiteID.Text;
//… usw
Trotzdem ist die daraus erstellte
XML dann “nackig”, es fehlen die namespace definitionen und der Rootknoten ist auch ohne präfix.
Ich kann zwar den erstellten
XML-string einem TXMLdocument zuweisen und dort analog die Attribute setzen,
Delphi-Quellcode:
XMLDocument1.XML.text:=xmltest.xml;
//…
XMLDocument1.DocumentElement.Attributes['xmlns:req'] := 'http://www.XYZ.com';
//…
Allerdings fehlt mir jegliche Idee (außer stringreplace
), wie ich dem rootknoten den Präfix hinzufüge.
Und außerdem kann es ja so nicht gewollt sein, das Erstellen der reinen
XML-Struktur ist durch den wizzard so simpel und schnell und dann ...
Analog das Auslesen, ein zweites
XML-file, was ausgelesen werden soll, sieht (gekürzt) so aus
XML-Code:
<?
xml version="1.0" encoding="UTF-8" ?>
- <req: TrackingResponse
xmlns:req="http://www.XYZ.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.XYZ.com track-err-res.xsd">
- <Response>
- <ServiceHeader>
<MessageTime>2012-01-09T17:00:16+01:00</MessageTime>
</ServiceHeader>
</Response>
</req: TrackingResponse>
Delphi-Quellcode:
XmlResponse := LoadTrackingResponse('D:\test_response.xml');
ShowMessage(XmlResponse.Response.ServiceHeader.MessageTime);
Funktioniert nur, wenn ich vorher das “req:” vor Trackingresponse entferne.
Wie bekomme ich das Präfix hier dann wieder ohne stringreplace weg? Oder wie kann dieses
XML mit Hilfe das Datenbindungsexperten ausgelesen werden?
Danke Frank