none
How to select a specific XML value via XPath - Einen Wert aus XML auslesen mit XPath ? RRS feed

  • Frage

  • Hello,

    i have a xml file with the following structure:
    ich habe eine XML Datei mit folgender Struktur:

    <vlstatus>
    <status>OK</status>
    <fp pilot="xxxx">
     <leg>
      <index>0</index>
      <ICAO>EHAM</ICAO>
      <ETA>1297283940</ETA>
      <status>ontime</status>
      <passengers>400</passengers>
      <waitfor></waitfor>
      </leg>
     <leg> 
      <index>1</index>
      <ICAO>EDDH</ICAO>
      <ETA>1297286940</ETA>
      <status>filed</status>
      <passengers>406</passengers>
      <waitfor></waitfor>
     </leg>
    </fp> 
    <vlstatus>
    

    Now i want to get a specific value like /leg/icao where index=1 (in the example it will be EDDH)
    Jetzt möchte ich einen speziellen Wert wie /leg/icao wo der Index 1 ist (im Beispiel EDDH)

    With the following code i can get the value where index = 0
    Mit dem folgenden code bekomme ich ja den wert wo index 0 ist

    ICAO = xml_Doc.SelectSingleNode("/vlstatus/fp[@pilot="xxxx"]/leg/ICAO").InnerText
    

    What is the easyest way to get the EDDH value ?
    Was ist der einfachste Weg, den EDDH Wert zu bekommen ?

    Regards,
    ReneFFM

    Mittwoch, 9. Februar 2011 23:11

Antworten

  • Hallo ReneFFM,

    Wir haben also folgende .xml Datei mit dem Namen input.xml:

    <vlstatus>
    <status>OK</status>
    <fp pilot="xxxx">
     <leg>
     <index>0</index>
     <ICAO>EHAM</ICAO>
     <ETA>1297283940</ETA>
     <status>ontime</status>
     <passengers>400</passengers>
     <waitfor></waitfor>
     </leg>
     <leg> 
     <index>1</index>
     <ICAO>EDDH</ICAO>
     <ETA>1297286940</ETA>
     <status>filed</status>
     <passengers>406</passengers>
     <waitfor></waitfor>
     </leg>
    </fp> 
    </vlstatus>
    

     

    Folgender Code basiert sich auf LinqToXML und bringt Dir den Wert von ICAO wenn index 1 ist:

     

    Public Class Form1
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Dim FullPath As String = Application.StartupPath + "\input.xml"
    
      Dim _charSheet As XDocument = XDocument.Load(FullPath)
      Dim _charInfoEl As IEnumerable(Of XElement) = _charSheet.Root.Descendants("leg")
    
      '//For Each item In _charInfoEl
      '// Console.WriteLine(item.Element("index").Value)
      '// Console.WriteLine(item.Element("ICAO").Value)
      '//Next
    
      Dim ICAO = From cust In _charInfoEl _
       Where cust.Element("index").Value = "1" _
        Select cust.Element("ICAO").Value
    
      Console.WriteLine(ICAO(0))
    
     End Sub
    
    End Class
    

     

    Grüße,

    Robert

    Donnerstag, 10. Februar 2011 15:51
    Moderator

Alle Antworten

  • Hallo ReneFFM,

    Wir haben also folgende .xml Datei mit dem Namen input.xml:

    <vlstatus>
    <status>OK</status>
    <fp pilot="xxxx">
     <leg>
     <index>0</index>
     <ICAO>EHAM</ICAO>
     <ETA>1297283940</ETA>
     <status>ontime</status>
     <passengers>400</passengers>
     <waitfor></waitfor>
     </leg>
     <leg> 
     <index>1</index>
     <ICAO>EDDH</ICAO>
     <ETA>1297286940</ETA>
     <status>filed</status>
     <passengers>406</passengers>
     <waitfor></waitfor>
     </leg>
    </fp> 
    </vlstatus>
    

     

    Folgender Code basiert sich auf LinqToXML und bringt Dir den Wert von ICAO wenn index 1 ist:

     

    Public Class Form1
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Dim FullPath As String = Application.StartupPath + "\input.xml"
    
      Dim _charSheet As XDocument = XDocument.Load(FullPath)
      Dim _charInfoEl As IEnumerable(Of XElement) = _charSheet.Root.Descendants("leg")
    
      '//For Each item In _charInfoEl
      '// Console.WriteLine(item.Element("index").Value)
      '// Console.WriteLine(item.Element("ICAO").Value)
      '//Next
    
      Dim ICAO = From cust In _charInfoEl _
       Where cust.Element("index").Value = "1" _
        Select cust.Element("ICAO").Value
    
      Console.WriteLine(ICAO(0))
    
     End Sub
    
    End Class
    

     

    Grüße,

    Robert

    Donnerstag, 10. Februar 2011 15:51
    Moderator
  • Hallo ReneFFM,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Freitag, 18. Februar 2011 08:31
    Moderator