xmlRead aus Web

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    xmlRead aus Web

    Moin Moin zusammen,

    ich stecke mal wieder mit dem Kopf im Sand, komme nicht weiter und erbitte Schwarmwissen für etwas absolut triviales.
    Ich habe eine XML Datei die auf einem entfernten PC/Server liegt und diese ist per http erreichbar.
    Der Inhalt der XML sieht wie folgt aus.

    XML Inhalt:
    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    2. <ns2:ConnectorServices xmlns="http://ws.gematik.de/int/version/ProductInformation/v1.1" xmlns:ns2="http://ws.gematik.de/conn/ServiceDirectory/v3.1">
    3. <ProductInformation>
    4. <InformationDate>2020-12-10T15:55:11.238+02:00</InformationDate>
    5. <ProductTypeInformation>
    6. <ProductType>Konnektor</ProductType>
    7. <ProductTypeVersion>5.1.0</ProductTypeVersion>
    8. </ProductTypeInformation>
    9. <ProductIdentification>
    10. <ProductVendorID>RISEG</ProductVendorID>
    11. <ProductCode>RKONN</ProductCode>
    12. <ProductVersion>
    13. <Local>
    14. <HWVersion>1.0.0</HWVersion>
    15. <FWVersion>4.5.10</FWVersion>
    16. </Local>
    17. </ProductVersion>
    18. </ProductIdentification>
    19. </ProductInformation>
    20. <ns2:TLSMandatory>true</ns2:TLSMandatory>
    21. <ns2:ClientAutMandatory>true</ns2:ClientAutMandatory>
    22. </ns2:ConnectorServices>


    Jetzt versuche ich auf das Element "ProductVendorID" zuzugreifen bzw. möchte dessen Inhalt auslesen.
    Dafür nutze ich folgenden Code:

    VB.NET-Quellcode

    1. Private Sub XMLReader_SDS()
    2. Dim sds As XDocument = XDocument.Load("https://www.domain.de/connector.sds.xml"))
    3. tb_ti_vendor.Text = sds.Parent.Element("ProductVendorID").Value
    4. End Sub


    An einer anderen Stelle in meinem Code (Andere Funktion) kann ich mit dem selben Code eine andere XMLDatei auslesen.
    Hier kommt es jedoch zur Ex.Message: System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

    Was mach ich falsch?

    Grüße samson
    Nein! Doch! OHH!
    Wenn du schon die Exception bekommst, dann steht da auch ein StackTrace mit bei.
    Der führt dich dann zu dem Punkt, wo es knallt.

    Ich finde in der Doku keinen Anhaltspunkt, dass ​XDocument.Load() einen ​null-Wert zurückliefert, also würde ich vorsichtig behaupten, dass du die einzelnen Elemente auf Nullheit (​nothing) prüfst.

    Die Zeile 3 könntest du noch folgendermaßen anpassen:

    VB.NET-Quellcode

    1. ​tb_ti_vendor.Text = If(sds?.Parent?.Element("ProductVendorID")?.Value, "n/a")


    Dann würde im Text "n/a" stehen, wenn der obere Wert dann null (Nothing) ist
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    @siycah danke für den Hinweis, leider steht in der TextBox tatsächlich dann "n/a"...
    Ich habe die letzten 5 Stunden nur gegoogled und getestet was ich im Netz finde, leider komme ich immer noch nicht weiter.
    Es ist nur dieser eine Wert aus der XML den ich brauche, wenn ich die gesamthafte XML in der Ausgabe raus lasse, seh ich alles.
    Keine Ahnung wo ich da falsch liege.

    Grüße Stefan


    Habe meine Lösung endlich hinbekommen...
    Falls es jemanden interessiert:

    VB.NET-Quellcode

    1. Dim XMLPath As String = "https://www.domain.de/connector.sds.xml"
    2. Dim Version As String
    3. Dim XMLFile As New Xml.XmlDocument
    4. Try
    5. XMLFile.Load(XMLPath)
    6. Version = XMLFile.GetElementsByTagName("ProductVendorID").Item(0).InnerText
    7. TextBox1.Text = Version
    8. Catch ex As Exception
    9. MessageBox.Show("Fehler beim laden der connector.sds.xml")
    10. End Try

    Nein! Doch! OHH!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „samson“ ()

    Alternative Möglichkeit:

    Lass dir von VisualStudio die XML als Klasse einfügen. learn.microsoft.com/en-us/visu…ste-json-xml?view=vs-2022

    Dann hast das Datenmodell und kannst die xml einfach deserialisieren. learn.microsoft.com/de-de/dotn….deserialize?view=net-8.0
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen