![]() |
Soap Request bearbeiten
Hallo,
ich versuche einen SoupRequest im HttpRioBeforeExec zu bearbeiten. Allerdings klappt das ganze nicht wie gewünscht: Wenn ich so was mache:
Delphi-Quellcode:
dann wird in dem XML das Ersetzen korrekt durchgeführt. Wenn ich das ganze jetzt über Attribute versuche:
oXML:=TXMLDocument.Create(Application);
try oxml.XML.Text:=SOAPRequest; oXML.Active:=true; oXML.XML.Text:=StringReplace(oXML.XML.Text,'<Blub><BlubId>','<Blub xsi:type="BlubTyp"><BlubId>',[rfReplaceAll]); SOAPRequest:=oXML.XML.Text; oXML.XML.SaveToFile('e:\test_1.xml');
Delphi-Quellcode:
Dann klappt das nicht. In der Text_1.xml ist kein Attribut enthalten. Allerdings ist nach dem Node.Attributes.SetNamedItem() der Wert Node.Attributes.Length=1 (vorher 0) - also wurde ein Attribut hinzugefügt.
oXML:=TXMLDocument.Create(Application);
try oxml.XML.Text:=SOAPRequest; oXML.Active:=true; oNodeBlub:=(oXML.DOMDocument as IDOMNodeSelect).selectNodes('//BlubId'); for iINdex:=0 to oNodeBlub.length-1 do begin oNode:=oNodeBlub.item[iINdex]; oNode:=oNode.parentNode; oAttr:=oXML.DOMDocument.createAttribute('xsi:type'); oAttr.nodeValue:='BlubTyp'; oNode.attributes.setNamedItem(oAttr); end; SOAPRequest:=oXML.XML.Text; oXML.XML.SaveToFile('e:\test_1.xml'); Wenn ich jetzt dieses XML (ohne Attribut) in einer anderen Prozedur lade und den selben Code oben darauf los lasse, dann wird das Attribut gesetzt und gespeichert. Ich dreh langsam durch. Ich versteh nich was ich falsch mache. Würde mich echt freuen, wenn mir jemand helfen kann.. Grüße |
AW: Soap Request bearbeiten
Dein Weg um Attribute zu erzeugen kommt mir reichlich kompliziert vor.
Warum nicht so?
Delphi-Quellcode:
Attribute gibt es ja im Gegensatz zu Elementen nur einmal.for iINdex:=0 to oNodeBlub.length-1 do begin oNode:=oNodeBlub.item[iINdex]; oNode:=oNode.parentNode; oNode.setAttribute('xsi:type','BlubTyp'); end; Deshalb kann man sie einfach setzen (und damit einen neuen Knoten im DOM erzeugen). Deinen XPath - Ausdruck '//BlubId' kann man bestimmt noch verbessern. Im Moment sagt er ja "gibt mir alle <BlubId> - Elemente zurück". Was du wirklich brauchst wäre: "Gib mir alle <Blub> - Elemente zurück, die ein <BlubId> - Element enthalten". Damit lässt sich die Schleife nochmals vereinfachen. Vielleicht so '//BlubId/..' oder '//BlubId/parent::Blub' ? |
AW: Soap Request bearbeiten
HI,
klappt jetzt, habe das Ermitteln der Nodes geändert um IXMLNodes zurück zu bekommen und mit SetAttributeNS klappte das dann auch mit dem Speichern. @sx2008: ein SetAttribute gibts bei IDOMNodes aber nicht und wenn ich mit XPAth die Nodes suchen will bekomm ich nur die zurück. Deine Vorschläge zu XPath sind interessant, funktionieren jedoch nicht bei mir (Fehlermeldungen) - könnte es daran liegen dass ich noch Delphi 7 nutze? Egal, hat geklappt.. bzw. nur teilweise.... Die XML wird jetzt wie gedacht geändert und auch auf der HDD gespeichert und auch dem Parameter SoapRequest übergeben. Allerdings wird dennoch an den Service die unveränderte Nachricht geschickt (habe ich mit ![]() |
AW: Soap Request bearbeiten
Nachtrag: ist ein Bug in Delphi 7 der später behoben wurde :-(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz