verwendetes Datenbanksystem: keines
Hallo,
ich habe ein Problem:
try
{
MessageBox.Show(request);
string response = myWebHandler.executeRPC(request);
MessageBox.Show(response);
XmlDocument myXMLDoc = new XmlDocument();
myXMLDoc.LoadXml(response);
XmlNode bkm = myXMLDoc.SelectSingleNode("//adBKMURL");
BKMBox.Text = bkm.InnerText;
XmlNodeList nodes = myXMLDoc.SelectNodes("//text");
MessageBox.Show(bkm.InnerText);
int i = 1;
foreach (XmlNode myNode in nodes)
{
ResultBox.AppendText(i++ + "." + myNode.InnerText);
}
}
catch (Exception ex)
{ ResultBox.Text = ex.Message; }
Ich möchte den InnerText des Knotenelements "text" und des "adBKMURL" haben, aber ich habe leider einen Fehler: Es wird nichts zurück geschrieben in das Windows Form?!
Die Zeile:
MessageBox.Show(response);
funktioniert und zeigt mir die Antwort des Webservices in der MessageBox an.
Es muss also irgendwo ein Fehler in meiner Auswertung liegen, den ich bisher nicht sehe!?
Danke für Eure Hilfe!
Gibt dir Xpath denn überhaupt Knoten zurück?
Das wäre als erstes zu Prüfen.
Falls nicht, ist dein XPath -Statement falsch, bzw. der fragliche Namespace ist im Namespacemanager nicht angelegt.
OUT! OUT! You demons of stupidity!
-Dogbert
Hi,
gute Idee ich werde das prüfen.
Außerdem hab ich folgende News:
Es wird der Text "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." ins Textfield geschrieben??
BTW: Hast du einen Vorschlag wie ich das testen kann?
Hallo,
ich habe //adBKMURL und //text getestet in XML Spy. Dort bekomme ich den Inhalt der Knoten zurück, hätte mich auch gewundert, da ja // ne relative Adressierung einleitet.
Dennoch kriege ich das nicht zurück geschrieben.
Komisch..
Hallo Thamesite
Deine Fehlermeldung ist doch:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Da gibt es hier im Forum eine FAQ:
[FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
Vielleicht hilft das ja schon.
Gruss Lothi
Hi,
erstmal danke für den Link.
Aber ich habe dieses Problem kurioserweise nicht mehr.
Nochmal zurück zum ursprünglichen Code:
try
{
MessageBox.Show(request);
string response = myWebHandler.executeRPC(request);
MessageBox.Show(response);
XmlDocument myXMLDoc = new XmlDocument();
myXMLDoc.LoadXml(response);
XmlNode bkm = myXMLDoc.SelectSingleNode("//adBKMURL");
BKMBox.Text = bkm.InnerText;
XmlNodeList nodes = myXMLDoc.SelectNodes("//text");
MessageBox.Show(bkm.InnerText);
int i = 1;
foreach (XmlNode myNode in nodes)
{
ResultBox.AppendText(i++ + "." + myNode.InnerText);
}
}
catch (Exception ex)
{ ResultBox.Text = ex.Message; }
Das sieht doch okay aus, in einem anderen Projekt hat das tadellos funktioniert?
Muss ich evtl. beim SelectNodes noch den Namensraum angeben? (= das habe ich vorher auch nie machen müssen da ich nur einen habe)
Gruß
Hallo,
ich habe //adBKMURL und //text getestet in XML Spy. Dort bekomme ich den Inhalt der Knoten zurück, hätte mich auch gewundert, da ja // ne relative Adressierung einleitet.
Dennoch kriege ich das nicht zurück geschrieben.
Komisch..
Wenn du Namespaces hast brauchst du den Namespacemanager. Auch der Default-Namespace muss dann dort mit einem selbstgewählten Präfix hinterlegt sein.
Dein XPath kann im XmlSpy hundertmal matchen, das heißt nicht, das es auch im .NET funktioniert. Ein häufiges Problem, wenn man mit Xpath arbeitet.
OUT! OUT! You demons of stupidity!
-Dogbert
Hallo
Und im
myXMLDoc.InnerText Ist da etwas drin?
Die ResultBox ist leer? Kannst das ganze doch mal Schritt für Schritt durchgehen.
Die Path's sind richtig?
Hallo,
erstmal vielen vielen Dank für die Hilfe!
myXMLDoc.InnerText: Ja hier ist was drin und zwar genau das was ich verarbeiten will!
Das ist jetzt der letzte Stand von der XML Abfrage in meinem Code:
try{
Corticon.CcServerMessagingAxisService myWebHandler = new Corticon.CcServerMessagingAxisService();
MessageBox.Show(request);
string response=myWebHandler.executeRPC(request);
MessageBox.Show(response);
XmlDocument myXMLDoc = new XmlDocument();
myXMLDoc.LoadXml(response);
XmlNodeList nodes = myXMLDoc.SelectNodes(".//text");
MessageBox.Show(myXMLDoc.InnerText);
int i = 1;
foreach (XmlNode myNode in nodes)
{
ResultBox.AppendText(i++ + "." + myNode.InnerText);
}
XmlNode bkmNode = myXMLDoc.SelectSingleNode(".//adBKMURL");
BKMBox.Text = bkmNode.InnerText; //hier ist der fehler
}
catch (Exception ex)
{ ResultBox.Text = ex.StackTrace; }
Außerdem wichtig:
Die Exception lößt aus, bisher keine Ahnung wieso aber folgendes wird in die ResultBox zurückgeschrieben aufgrund der Exception:
bei Startform.Startfenster.button1_Click(Object sender, EventArgs e) in C:\Dokumente und Einstellungen\xxx\Desktop\Diplomarbeit\xxx\xxxTest 123\Start.cs:Zeile 104.
Zeile 104 ist:
BKMBox.Text = bkmNode.InnerText; //hier ist der fehler
Jetzt müssten wir eigentlich unmittelbar vor der Lösung stehen. =)
Es kann doch jetzt evtl. nur noch ein Namespace Problem sein? Oder was mit dem Form?
Ja fast.
Du hast uns jetzt mitgeteilt wo der Fehler ist aber nicht was der Fehler ist.
Ich würde einfach mal behaupten das der XMPath hier
XmlNode bkmNode = myXMLDoc.SelectSingleNode(".//adBKMURL");
einfach leer ist, weil er nichts findet. Aber siehst du sofort wenn du mal an dieser stelle einen Breakpoint setzt und dir die Variablen mal anschaust.
Godlike:
bkmNode null steht dort! Richtig!! 👍
Übrigens: BKMBox.Text = myXMLDoc.InnerText funktioniert, er klatscht alles dran aber ich will ja nicht alles auf einmal.
Demnach stimmt was mit dem XPath nicht mhm.. das erklärt auch die Null-Referenz und die Exception die dann auslößt.
Also ich habe ein kleines XML Dokument was zurück fliegt. Wichtig ist für mich der Knoten "text" und "adBKMURL" die beiden Knoten brauche ich.
Ansonsten ist die Struktur:
CorticonResponse
WorkDocuments
OEM
->adBKMURL
bzw.
CorticonResponse
Messages
Message
text
Kurios nur das XML Spy mit //text gar kein Problem hat, muss ich den Namespace xmlns="urn:Corticon" xmlns:xsi="...schemainstance" beachten?
Was schlägst du vor?
Genau jetzt musst du dich mit dem Beitrag von lindan (etwas weiter oben) auseinnander setzten.
Ich habe da schon mal was vorbereitet:
Gruss Lothi
Hallo,
so ich hab den Beitrag durchgelesen und hab möglichst viel versucht umzusetzen, dennoch bleibe ich hier hängen:
Bitte gucke dir nochmal meinen Code an und vielen Dank für die Hilfe bis hier her:
try{
Corticon.CcServerMessagingAxisService myWebHandler = new Corticon.CcServerMessagingAxisService();
MessageBox.Show(request);
string response=myWebHandler.executeRPC(request);
XmlDocument myXMLDoc = new XmlDocument();
XPathDocument doc = new XPathDocument(response);
XPathNavigator nav = doc.CreateNavigator();
XmlNamespaceManager ns = new XmlNamespaceManager(nav.NameTable);
ns.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
ns.AddNamespace("urn", "Corticon");
XPathExpression expr = nav.Compile("//text");
expr.SetContext(ns);
XPathNodeIterator nodeiterator = nav.Select(expr);
// Was kommt jetzt hier hin? Damit ich den //text Knoten auslesen kann?
// muss ich die xsi Schema Instanz auch noch adden?
XmlNodeList nodes = myXMLDoc.SelectNodes("//text");
// /CorticonResponse/Messages/Message/text
int i = 1;
foreach (XmlNode myNode in nodes)
{
ResultBox.AppendText(i++ + "." + myNode.InnerText);
}
/*Zweiter Knoten adBKMURL auslesen:*/
XmlNode bkmNode = myXMLDoc.SelectSingleNode("//adBKMURL");
// /CorticonResponse/WorkDocuments/OEM/adBKMURL
BKMBox.Text = bkmNode.InnerText; //hier ist der fehler
// BKMBox.Text = myXMLDoc.InnerText;
}
catch (Exception ex)
{ ResultBox.Text = ex.StackTrace; }
Arbeite ich jetzt nur noch auf den Iterator oder wie läuft das mit dem myXMLDoc.Select.. jetzt nicht mehr?
Gruß
Guten Abend
So wie ich das jetzt verstanden habe (habe das selber auch nie gemacht) kannst du das ganze auch über XmlDocument und SingleNode machen.
XmlDocument myXMLDoc = new XmlDocument();
myXMLDoc.LoadXml(response);
XmlNamespaceManager nsMan= new XmlNamespaceManager(myXMLDoc.NameTable);
nsMan.AddNamespace("xsi", xmlNamespace);
nsMan.AddNamespace("urn", xmlNamespace);
XmlNode test = myXMLDoc.DocumentElement.SelectSingleNode("/xsi:xyz",nsMan
So in der Art habe ich es jetzt aus der Hilfe verstanden. Der Rest wird wohl ausprobieren sein.
Gruss Lothi
Hallo Lothi,
ich habs jetzt hinbekommen, also schon um 16:45 Uhr konnte mich jetzt aber erst melden.
Vielen Dank!! Ich dachte schon ich würd's nie hinbekommen. 🙂