AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Soap Request bearbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

Soap Request bearbeiten

Ein Thema von Lemmy · begonnen am 14. Apr 2012 · letzter Beitrag vom 17. Apr 2012
Antwort Antwort
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#1

Soap Request bearbeiten

  Alt 14. Apr 2012, 23:04
Hallo,

ich versuche einen SoupRequest im HttpRioBeforeExec zu bearbeiten. Allerdings klappt das ganze nicht wie gewünscht:

Wenn ich so was mache:

Delphi-Quellcode:
  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');
dann wird in dem XML das Ersetzen korrekt durchgeführt. Wenn ich das ganze jetzt über Attribute versuche:

Delphi-Quellcode:
  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');
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Soap Request bearbeiten

  Alt 15. Apr 2012, 01:24
Dein Weg um Attribute zu erzeugen kommt mir reichlich kompliziert vor.
Warum nicht so?
Delphi-Quellcode:
    
for iINdex:=0 to oNodeBlub.length-1 do begin
   oNode:=oNodeBlub.item[iINdex];
   oNode:=oNode.parentNode;
   oNode.setAttribute('xsi:type','BlubTyp');
end;
Attribute gibt es ja im Gegensatz zu Elementen nur einmal.
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' ?

Geändert von sx2008 (15. Apr 2012 um 02:01 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Soap Request bearbeiten

  Alt 17. Apr 2012, 08:39
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 http://www.membrane-soa.org/downloads/http-monitor.htm geprüft). Ich habe das Projekt dann man unter XE2 getestet, funktioniert wie gewünscht, das fehlende Attribut steht drin und wird übertragen. Gibts irgend welche Erkenntnisse, dass die Bearbeitung des Soap-Request unter Delphi 7 nicht funktioniert?

Geändert von Lemmy (17. Apr 2012 um 08:42 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Soap Request bearbeiten

  Alt 17. Apr 2012, 10:11
Nachtrag: ist ein Bug in Delphi 7 der später behoben wurde
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz