xml-String aus WEB-Services auslesen

czemmel

Mitglied
Hallo zusammen,
versuche mich mal mit Webservices und hänge da an einem eigentlich kleinen Problem.
Ich habe einen Webservice dem ein XML-String übergeben wird.

Nun möchte ich aufgrund des Aufbaues des XML-Strings verschiedene Funktionen aufrufen (hier z.B. LOGIN)


PHP-Code:
<PDAC><FUNCTION>LOGIN</FUNCTION><DATA>Hallo</DATA></PDAC>

Beim auslesen bekomme ich aber immer die Fehlermeldung "Illegales Zeichen im Pfad!!

Aufruf der Funktion:

Code:
Dim strfunktion As String
strfunktion = funktion_LeseXMLItem(strXML, "FUNCTION")Funktion:

Zitat:
Private Function funktion_LeseXMLItem(ByVal strXML As String, ByVal strItem As String) As String
' liest aus dem übergebenen XML-Stream die Funktion aus
Try
Dim reader As New XmlTextReader(strXML)


If reader.AttributeCount > 0 Then 'Ruft die Anzahl der Attribute im aktuellen knoten ab
If reader.Item(strItem).ToString() <> " " Then 'Ruft den Wert des Attributes ab
funktion_LeseXMLItem = reader.Item(0).ToString
Return "Fast Richtig"
End If
End If

Kann mir jemand weiterhelfen

Danke
Czemmel
 

deepthroat

Erfahrenes Mitglied
Hi.

Du könntest das sehr einfach mit einem XmlDocument machen:
Visual Basic:
Dim doc as new XmlDocument

If doc.LoadXml(xmlstring) Then
  Return doc.selectSingleNode("//FUNCTION").Text
End If
Allerdings ist das ganze nicht wirklich der Sinn bei einem Webservice. Wenn du verschiedene Funktionen hast, dann implementier sie doch einfach im Webservice so das sie aufgerufen werden können. Es scheint du willst eher soetwas wie eine dispatch Funktion schreiben, was im Grunde die Vorteile eines Webservice wieder komplett aufhebt.

Gruß

PS: Bitte verwende doch die entsprechenden Code-Tags - z.B. [code=vb]..[/code] für Visual Basic etc.
 

czemmel

Mitglied
Danke für die schnelle Antwort.

Das mit den Codes, Entschuldigung hab wirklich danaeben gegriffen.

Ich möchte ja die Funktionen auslesen, diese ändern sich ja immer,
hier habe ich die Funktion : z.B. LOGIN
PHP:
<PDAC><FUNCTION>LOGIN</FUNCTION><DATA>Hallo</DATA></PDAC>

Je nach dem welche Funktion (Daten suchen, speichern usw.) über den XML-String gesendet wird, so rufe ich dann die Methode auf.
so muss ich immer nur einen Web-Service aufrufen

Gruß
Czemmel
 

deepthroat

Erfahrenes Mitglied
Danke für die schnelle Antwort.

Das mit den Codes, Entschuldigung hab wirklich danaeben gegriffen.

Ich möchte ja die Funktionen auslesen, diese ändern sich ja immer,
hier habe ich die Funktion : z.B. LOGIN
PHP:
<PDAC><FUNCTION>LOGIN</FUNCTION><DATA>Hallo</DATA></PDAC>

Je nach dem welche Funktion (Daten suchen, speichern usw.) über den XML-String gesendet wird, so rufe ich dann die Methode auf.
Ja, und genau das ist nicht wirklich sinnvoll. Wenn du einen Webservice benutzen willst, solltest du einfach eine Proxyklasse mit dem Programm wsdl.exe aus der WSDL Datei des Webservice generieren und kannst dann damit die Funktionen/Operationen die der Webservice anbietet einfach normal aufrufen.

so muss ich immer nur einen Web-Service aufrufen
Der Webservice ist ja immer der gleiche, man ruft nur andere Operationen des Webservice auf.

Schau mal hier: http://www.aspheute.com/artikel/20010621.htm
und hier: http://www.aspheute.com/artikel/20010622.htm

Gruß
 

czemmel

Mitglied
Ja, da gebe ich dir Recht, aber ich habe die Vorgabe es so zu verarbeiten.

Bei deinem Bspl. bekomme ich aber eine Fehlermeldung: Der Ausdruck ergibt keinen Wert

Dann habe ich es versucht die IF-Anweisung weg zu lassen und dann kommt diese Fehlermeldung:
Der Wert vom Typ "System.Xml.XmlNode" kann nicht zu "String" konvertiert werden. C:\tmp\Enayati\WebSite1\App_Code\Service.vb

Kannst du mir trotzdem helfen
Gruß
czemmel
 

deepthroat

Erfahrenes Mitglied
Bei deinem Bspl. bekomme ich aber eine Fehlermeldung: Der Ausdruck ergibt keinen Wert
Oh ja, mein Fehler. Der Code war nur so aus dem Gedächtnis zusammengeschrieben - und mein Gedächtnis scheint nicht mehr allzu gut zu sein :(

Probier's mal so (getestet!):
Visual Basic:
Dim doc As New XmlDocument

doc.LoadXml(xmlstring)
Console.WriteLine( doc.SelectSingleNode("//FUNCTION").InnerText)
Gruß
 

czemmel

Mitglied
Danke für die Hilfe
Habe momentan folgenden code,
Aufruf der Methode:

Code:
strfunktion = funktion_LeseXMLItem(strXML, "FUNCTION")

Verarbeitung :

Code:
    Private Function funktion_LeseXMLItem(ByVal strXML As String, ByVal strItem As String) As String
        ' liest aus dem übergebenen XML-Stream die Funktion aus 
        Try

            Dim doc As New XmlDocument
            doc.LoadXml(strXML)
            
            Return doc.SelectSingleNode("//" & strItem).InnerText '--> Login wird zurück gegeben
           
        Catch ex As Exception
            Return ex.Message.ToString
        End Try
    End Function

ich bekomm auch die Funktion zurück die in dem xml-Stream steht. Wie aber kann ich auch die Daten gleichzeitig auslesen. Wenn ich es mit einer weiteren String-Variable probiere bekomme ich immer Falsche Daten
Beispiel für den Aufruf und der Verarbeitung:
Code:
         strfunktion = funktion_LeseXMLItem(strXML, "FUNCTION")
        strdata = funktion_LeseXMLItem(strXML, "DATA")
Select Case strfunktion
            Case "suchen_Artikelnummer" 'Beispiel
            Case "LOGIN"
                Return strdata
        End Select
        
        Return "Kein Select"

Gruß
czemmel
 

czemmel

Mitglied
Beim mir jetzt auch.
Habe folgendes Festgestellt:
Wenn man mit dem Debug-Modus startet kommt ein anderes Ergebnis zum vorschein

Wenn ich neu veröffentliche kommt das Richtige Ergebnis

Vielen Dank für die Hilfe
Gruß
Czemmel