Problem beim XML auslesen: Kein Wert

  • VB.NET

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

    Problem beim XML auslesen: Kein Wert

    Hallo,

    ich habe folgendes Problem:

    ich habe als Ausgangsbasis einen XML String (keine Datei) und möchte nun dort einige Sachen auslesen, jedoch bekomm ich nix an Daten raus. Vermutlich hab ich irgendeine Kleinigkeit beim lesen von X Tutorials/Anleitungen/Code-Beispielen übersehen

    Hier mal der Auszug aus dem XML an dem ich aktuell arbeite:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <ItemLookupResponse>
    3. <OperationRequest>
    4. <RequestId>9c4febf8-da67-4769-9388-c89262922e94</RequestId>
    5. <Arguments>
    6. <Argument Name="Condition" Value="All"/>
    7. <Argument Name="Operation" Value="ItemLookup"/>
    8. <Argument Name="Service" Value="AWSECommerceService"/>
    9. <Argument Name="AssociateTag" Value="c4-do-21"/>
    10. <Argument Name="Version" Value="2011-08-01"/>
    11. <Argument Name="Signature" Value="0ux14ibyKGDqMjMsOGzRs86R9fIXnCqK9CDR1UsJ2Ns="/>
    12. <Argument Name="ItemId" Value="B0027X4LEO"/>
    13. <Argument Name="Timestamp" Value="2013-02-15T18:24:08Z"/>
    14. <Argument Name="ResponseGroup" Value="OfferFull"/>
    15. </Arguments>
    16. <RequestProcessingTime>0.0502570000000000</RequestProcessingTime>
    17. </OperationRequest>
    18. </ItemLookupResponse>


    Und hier der Code mittels dem ich gern den Inhalt von <RequestId>9c4febf8-da67-4769-9388-c89262922e94</RequestId> bekommen möchte (als "daten_string" wird der Funktion der o.g. XML-text als String übergeben):

    VB.NET-Quellcode

    1. Private Function daten_filtern(ByVal daten_string As String)
    2. Dim XML_Daten As XDocument = XDocument.Parse(daten_string)
    3. MsgBox(daten_string) 'Kontrolle des Strings
    4. Dim request_id As String = XML_Daten.<ItemLookupResponse>.<OperationRequest>.<RequestId>.Value
    5. MsgBox("ID: " & request_id) 'kontrolle der Ausgabe ... leider nix bisher
    6. Return request_id
    7. End Function


    Als "daten" bekommt die Funktion den vollständigen XML-String, jedoch gibt mir die MSG-Box (ist zum testen dort drin, genau wie die erste) am Ende nix wieder (außer dem "ID: ")
    @ErfinderDesRades
    Bekomm ich genau das gleich bei raus: aso nix, siehe Bild
    Auch mit XML_Daten.Root.<OperationRequest>.<RequestId>.Value bekomm ich nix bei raus.

    @Artentus
    Da der XML-String in etwa 10x so lang ist wie das von mir gepostete Stück, und ich darin etwa 30 Abfragen machen möchte, teils mit mehreren gleichnamigen Nodes, und dann darauf resultierend ggf. weitere 1-3 XML-Strings ähnlicher Länge bearbeiten möchte, weiß ich nicht ob das ganze noch performant ist bei der Datenmenge


    Kann das ganze vllt daran liegen, das der String vollkommen "unformatiert" daher kommt? Nur eine Frage, um wirklich alles auszuschließen.

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?><ItemLookupResponse><OperationRequest><RequestId>551d7264-c9bb-42f9-82a5-c1e6a944d7fc</RequestId><Arguments><Argument Name="Condition" Value="All"></Argument><Argument Name="Operation" Value="ItemLookup"></Argument><Argument Name="Service" Value="AWSECommerceService"></Argument><Argument Name="AssociateTag" Value="c4-do-21"></Argument><Argument Name="Version" Value="2011-08-01"></Argument><Argument Name="Signature" Value="MaCNNfU7bQAjY3pt2LJQzGeODeqD0zag/ijN6/jqmus="></Argument><Argument Name="ItemId" Value="B0027X4LEO"></Argument></Argument><Argument Name="Timestamp" Value="2013-02-15T21:13:30Z"></Argument><Argument Name="ResponseGroup" Value="OfferFull"></Argument></Arguments><RequestProcessingTime>0.0190900000000000</RequestProcessingTime></OperationRequest>
    Bilder
    • Unbenannt.png

      15,48 kB, 154×154, 351 mal angesehen
    for copy & paste:

    VB.NET-Quellcode

    1. Dim XEl As XElement = <ItemLookupResponse>
    2. <OperationRequest>
    3. <RequestId>9c4febf8-da67-4769-9388-c89262922e94</RequestId>
    4. <Arguments>
    5. <Argument Name="Condition" Value="All"/>
    6. <Argument Name="Operation" Value="ItemLookup"/>
    7. <Argument Name="Service" Value="AWSECommerceService"/>
    8. <Argument Name="AssociateTag" Value="c4-do-21"/>
    9. <Argument Name="Version" Value="2011-08-01"/>
    10. <Argument Name="Signature" Value="0ux14ibyKGDqMjMsOGzRs86R9fIXnCqK9CDR1UsJ2Ns="/>
    11. <Argument Name="ItemId" Value="B0027X4LEO"/>
    12. <Argument Name="Timestamp" Value="2013-02-15T18:24:08Z"/>
    13. <Argument Name="ResponseGroup" Value="OfferFull"/>
    14. </Arguments>
    15. <RequestProcessingTime>0.0502570000000000</RequestProcessingTime>
    16. </OperationRequest>
    17. </ItemLookupResponse>
    18. Private Sub frmA0Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    19. MessageBox.Show(XEl.<OperationRequest>.<RequestId>.Value)
    20. End Sub
    @Artentus
    Dann werd ich das gleich mal testen im gesamten XML-String :)

    @ErfinderDesRades
    Da hatte ich auch schon dran gedacht, jedoch bekomm ich den XML-String innerhalb der Anwendung als HttpWebRequest --> HttpWebResponse --> StreamReader --> String und kann ihn daher nicht selber deklarieren.
    Wenn ich den StreamReader Stream übergebe geht das auch nicht, da Stream nicht zu system.xml.linq.xelement konvertiert werden kann.

    yaty schrieb:

    geht das auch nicht
    Probier doch mal, mit dem String ein XmlDocument zu machen und dann nach Schema F.
    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!