InnerText aus XML lesen?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Mircosofter2206.

    InnerText aus XML lesen?

    Hallo liebes Forum!

    Ich hätte da (mal wieder) ein kleines Problem beim Auslesen von einem XML.

    Die Aufgabe der folgenden Funktion sollte es sein, dass sie den InnerText eines XML-Knotens ausliest und damit die WOEID einer Postleitzahl herausfindet.

    VB.NET-Quellcode

    1. Function GetWoeid(Postleitzahl As Integer)
    2. Dim m_xmld As XmlDocument
    3. Dim m_nodelist As XmlNodeList
    4. 'Create the XML Document
    5. m_xmld = New XmlDocument()
    6. 'Load the Xml file
    7. m_xmld.Load("http://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text%3D%22Deutschland " & Postleitzahl & "%22&format=xml")
    8. 'Get the list of name nodes
    9. m_nodelist = _
    10. m_xmld.SelectNodes("query/results/place/woeid")
    11. Dim sd As XmlNode
    12. sd = m_nodelist.Item(0)
    13. Return sd.InnerText
    14. End Function


    Das Problem ist folgendes:
    Wenn ich bei m_xmld.SelectNodes() "query/results" angebe funktioniert alles wunderbar, wenn ich jedoch
    bei m_xmld.SelectNodes() "query/results/place/woeid" angebe, bringt er mir beim "Return" immer ne "NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."


    Woran könnte das liegen?

    Ich bin für alle Hilfe offen :D

    Grüße,

    Mircosofter :)
    @Mircosofter2206 Speicher zunächst mal die Datei lokal auf Deiner Festplatte und sieh sie Dir an, da solltest Du sehen, was geht und was nicht.
    Du kannst ja die Existenz eines Knotens abfragen, und wenner nich da ist, gibt es eine entsprechende Fehlermeldung. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Mircosofter2206
    1. machst Du Option Strict On
    2. musst Du die Postleitzahlen in Deutschland 5-stellig machen, ihnen also ggf. führende 0 einfügen.
    3. Die Syntax für SelectNodes() passt nicht zu dieser XML, da musst Du Dich durchhangeln.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @mox

    XML-Quellcode

    1. <query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2016-05-19T20:34:17Z" yahoo:lang="de-DE">
    2. <results>
    3. <place xmlns="http://where.yahooapis.com/v1/schema.rng" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" xml:lang="en-US" yahoo:uri="http://where.yahooapis.com/v1/place/12836104">
    4. <woeid>12836104</woeid>
    5. <placeTypeName code="11">Postal Code</placeTypeName>
    6. <name>74855</name>
    7. <country code="DE" type="Country" woeid="23424829">Germany</country>
    8. <admin1 code="DE-BW" type="Land" woeid="2345481">Baden-Wurttemberg</admin1>
    9. <admin2 code="" type="District" woeid="12596820">Neckar-Odenwald-Kreis</admin2>
    10. <admin3/>
    11. <locality1 type="Town" woeid="657793">Hassmersheim</locality1>
    12. <locality2/>
    13. <postal type="Postal Code" woeid="12836104">74855</postal>
    14. ");"><centroid>
    15. <latitude>49.30294</latitude>
    16. <longitude>9.11479</longitude>
    17. </centroid>
    18. ");"><boundingBox>
    19. ");"><southWest>
    20. <latitude>49.27317</latitude>
    21. <longitude>9.07507</longitude>
    22. </southWest>
    23. ");"><northEast>
    24. <latitude>49.33271</latitude>
    25. <longitude>9.15451</longitude>
    26. </northEast>
    27. </boundingBox>
    28. <areaRank>1</areaRank>
    29. <popRank>1</popRank>
    30. <timezone type="Time Zone" woeid="28350890">Europe/Berlin</timezone>
    31. </place>
    32. </results>
    33. </query>

    :D

    @RodFromGermany

    1. Erledigt :)
    2. Ich mach noch eine Abfrage, die prüft, ob die PLZ fünftstellig ist, dann wäre das auch abgehakt
    3. Köntest du mir einen Tipp für ein gutes XML-Tutorial geben???

    //EDIT:

    Mircosofter2206 schrieb:

    ");"><boundingBox>
    ");"><southWest>


    Sorry! Hat mein Google Chrome warscheinlich mist gebaut!

    Mircosofter2206 schrieb:

    ob die PLZ fünftstellig ist
    Wie prüfst Du bei einem Integer eine führende Null: PLZ = 01234?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Mircosofter2206 schrieb:

    oder
    Nö.
    Du musst einen String generieren, z.B. so:

    VB.NET-Quellcode

    1. Dim plz = 1234
    2. Dim txt = plz.ToString("00000")
    3. MessageBox.Show(txt)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!