Avatar billede neoo Nybegynder
24. januar 2008 - 10:23 Der er 20 kommentarer og
2 løsninger

Mindre xmlget fejl

Hej med jer.
er der nogen af jer der kan se hvorfor jeg ikke kan få noget xml tilbage men får en kæmpe streng tilbage :( .

(det er en webservice som læser fra et andet webservice)


    Public Function Getxml() As String
        Dim url As String = "http://www.testadresse.ashx?subject=test1&action=get&navn=jens"
        Dim wRequest As System.Net.HttpWebRequest
        Dim wResponse As System.Net.HttpWebResponse
        Dim StreamHandler As System.IO.StreamReader
        Dim xmlDoc As New System.Xml.XmlDocument

        Try
            wRequest = System.Net.WebRequest.Create(url)
            wRequest.Headers.Add("Man", "GET " & url)
            wResponse = CType(wRequest.GetResponse, System.Net.WebResponse)
            If wRequest.HaveResponse Then
                If wResponse.StatusCode = Net.HttpStatusCode.OK Then
                    StreamHandler = New System.IO.StreamReader(wResponse.GetResponseStream())
                    xmlDoc.LoadXml(StreamHandler.ReadToEnd)
                    return xml.innerText

                End If
            End If
        Catch ex As Exception
        End Try
    End Function
Avatar billede nielle Nybegynder
24. januar 2008 - 10:47 #1
Hvad er der egentlig i den "kæmpe streng"?

Umiddelbart ville der blive smidt en exception hvis LoadXml() ikke får noget lovligt XML som indpit. Denne exception bliver fanget i catch-leddet, men der ertruenere du ikke noget. Det burde du gøre. Det er faktisk lidt underligt at din kode får lov til at kompilere når du ikke gør det?!
Avatar billede neoo Nybegynder
24. januar 2008 - 10:54 #2
det indhold jeg læser fra adresse Dim url As String er XML, men jeg får det ud som
streng :(, og faktisk er det kun en elemen jeg skal bruge fra den webservice.
jeg lavet små ændringer nu.. men det hjælper ikk ret meget
Avatar billede powerpunk Nybegynder
24. januar 2008 - 10:55 #3
Måske er det mig der har stirret mig blind på koden, men jeg synes ikke jeg kan finde deklarationen af variablen 'xml' (som i "return xml.InnerText"). Hvad er det for en type?

Hvad forventer du at få tilbage? (og hvad får du?)

Innertext returnerer indholdet af en xmlnode som, ja, en streng. Altså også sub-nodes og sub-sub-nodes etc. f.eks "<xml><node>hello<subnode>world!</subnode></node></xml>";
Avatar billede neoo Nybegynder
24. januar 2008 - 10:55 #4
Det er min seneste kode..


    Public Function GetXml() As String
        Dim url As String = "http://www.testadresse.ashx?subject=test1&action=get&navn=jens"
        Dim wRequest As System.Net.HttpWebRequest
        Dim wResponse As System.Net.HttpWebResponse
        Dim StreamHandler As System.IO.StreamReader
        Dim xmlDoc As New System.Xml.XmlDocument

        Try
            wRequest = System.Net.WebRequest.Create(url)
            wRequest.Headers.Add("Man", "GET " & url)
            wResponse = CType(wRequest.GetResponse, System.Net.WebResponse)
            If wRequest.HaveResponse Then
                If wResponse.StatusCode = Net.HttpStatusCode.OK Then
                    StreamHandler = New System.IO.StreamReader(wResponse.GetResponseStream())
                    xmlDoc.LoadXml(StreamHandler.ReadToEnd)

                    Return xmlDoc.SelectSingleNode("/test/command/person/email").InnerText


                End If
            End If
        Catch ex As Exception
            Return ex.ToString
        End Try
    End Function
Avatar billede nielle Nybegynder
24. januar 2008 - 10:56 #5
Det er jo også dig selv der konvertere det til tekst med denne:

return xml.innerText
Avatar billede powerpunk Nybegynder
24. januar 2008 - 10:58 #6
Funktionen er også deklareret som "As String"
Hvis du vil have et XmlDocument eller en XmlNode ud skal den naturligvis returnere en sådan...
Avatar billede neoo Nybegynder
24. januar 2008 - 10:58 #7
lige nu melder den med følgende kode:
Kommentar: neoo
24/01-2008 10:55:54


<?xml version="1.0" encoding="utf-8" ?>
  <anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" d1p1:type="q1:string" xmlns:d1p1="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">System.NullReferenceException: Objektreferencen er ikke indstillet til en forekomst af et objekt. ved Service.GetPerson() i c:\inetpub\wwwroot\sendmail\App_Code\Service.vb:linje 41</anyType>
Avatar billede nielle Nybegynder
24. januar 2008 - 10:58 #8
24/01-2008 10:55:35 - godt set!

Det er bl.a. er ar arghumenterne for helst ikke at anvende globalt definerede variable! Kun lokale variable eller variable som er "kommet ind i" funktionen som et argument.
Avatar billede neoo Nybegynder
24. januar 2008 - 11:03 #9
jamen hvad skal jeg rette for at få email adressen tilbage som text eller xml.
det er kun en node jeg skal bruge ?
Avatar billede nielle Nybegynder
24. januar 2008 - 11:09 #10
Hvis du får en null-pointer exception tyder det på at din XPath ikke er rigtig i forhold til hvor din node ligger i XML'en.
Avatar billede nielle Nybegynder
24. januar 2008 - 11:15 #11
Rent faktisk indikere 24/01-2008 10:58:36 at der allerede er noget som går galt i selve kaldet til GetPerson(). Det er ikke lige til at se hvordan relationen er mellem det og din GetXml() kode.
Avatar billede powerpunk Nybegynder
24. januar 2008 - 11:21 #12
Det kunne se ud til at være en fejl i webservicen i den anden ende....
Og den returnerer så bare exception.message i stedet for det den blev spurgt om...
Avatar billede neoo Nybegynder
24. januar 2008 - 11:22 #13
det fungere ikke :(



min xpath ser sådan ud

Return xmlDoc.SelectSingleNode("res/com/emp/name/email").InnerText



xml ser sådan ud :

<res>
<com>
<emp>
<name>
  <first>test</first>
  <last>efternavn</last>
  </name>
  <title>navn</title>
  <email>test@testssss.dk</email>
</name>
</com>
</res>


men jeg får følgende fejl.¨


System.NullReferenceException: Objektreferencen er ikke indstillet til en forekomst af et objekt. ved Service.GetXml() i c:\inetpub\wwwroot\sendmail\App_Code\Service.vb:linje 42
Avatar billede powerpunk Nybegynder
24. januar 2008 - 11:31 #14
Hvilken linje i den kode du har vist er linje 42?
Avatar billede nielle Nybegynder
24. januar 2008 - 11:52 #15
Der er i hvert fald fejl i den der xml. 2 </name> tags men kin 1 <name> tag?
Avatar billede nielle Nybegynder
24. januar 2008 - 11:53 #16
Den sidste skulle nok have heddet </emp>
Avatar billede nielle Nybegynder
24. januar 2008 - 11:54 #17
Ud over det så ser email ikek ud til at ligge inde i <name> (og det skal den vel heller ikke) ... så XPath'en burde være:

//res/com/emp/email
Avatar billede powerpunk Nybegynder
24. januar 2008 - 11:57 #18
Ah ja... godt set...
Det kunne vel godt resultere i en NullReferenceException, fordi den ikke kan finde <emp> elementet, og derfor returnerer null/Nothing til xmlDoc.SelectSingleNode("/test/command/person/email")

(NullReferenceException'en opstår så når InnerText bliver kaldt. Det er derfor der er mange der holder på at nestede kald er noget hø...)
Avatar billede powerpunk Nybegynder
24. januar 2008 - 11:59 #19
Så problemet synes at være en kombination af gal XPath og malformed XML...
Avatar billede neoo Nybegynder
24. januar 2008 - 14:47 #20
det virker nu, kan i ikke smide svar ?
takker for hjælpen
Avatar billede nielle Nybegynder
24. januar 2008 - 15:32 #21
Svar :^)
Avatar billede powerpunk Nybegynder
24. januar 2008 - 15:40 #22
endnu et svar...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester