2016-05-19 5 views
0

Betrachten Sie die folgende XML.Ich möchte nur einen bestimmten Kindknotenwert von einem bestimmten übergeordneten Knoten lesen.Lesen von untergeordneten Knoten aus XML mit demselben Namen unter Verwendung von asp.net C#

**<response> 
    <Statuses> 
     <Detail> 
      <number>123</number> 
     </Detail> 
     <ToDate> 
      <date>1/1/2000</date> 
     </ToDate> 
     <FromDate> 
      <date>1/1/2000</date> 
     </FromDate> 
    </Statuses> 
</response>** 

Ich möchte den Datumswert aus dem Tag "fromDate" und auch die Nummer aus dem Tag details lesen.

Ich habe versucht,

If(reader.name.Equals("Statuses"StringComparison.CurrentCultureIgnoreCase) 
{ 
dateValue=reader.GetAttribute("/FromDate/Date"); 
} 

Dies funktioniert nicht. Bitte suggerieren.

+5

Nun Sie versuchen, nicht ein Attribut zu lesen, Sie versuchen, ein Element zu lesen - und das ist nicht, wie Sie 'XmlReader' verwenden. Ich würde * dringend * vorschlagen, dass Sie LINQ to XML verwenden - lesen Sie die XML in ein 'XDocument', dann können Sie' var date = doc.Root.Element ("Status") verwenden. Element ("FromDate"). Element ("Datum"); ' –

Antwort

1

ich mit Jon Skeet stimmen Sie wirklich LINQ to XML für diese Art von tasks.It würde verwenden sollten, um Ihr Leben leichter machen:

Sameple XML-Datei:

<response> 
    <Statuses> 
    <Detail> 
     <number>123</number> 
    </Detail> 
    <ToDate> 
     <date>1/1/2000</date> 
    </ToDate> 
    <FromDate> 
     <date>1/1/2000</date> 
    </FromDate> 
    </Statuses> 
    <Statuses> 
    <Detail> 
     <number>1234</number> 
    </Detail> 
    <ToDate> 
     <date>1/1/2000</date> 
    </ToDate> 
    <FromDate> 
     <date>1/1/2001</date> 
    </FromDate> 
    </Statuses> 
</response> 

Code:

using System; 
using System.Linq; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //If the xml file is in the solution - set Build Action of the file to "Embedded Resource" 
      //and Copy to Output Directory to "Copy always" 
      var doc = XDocument.Load("input.xml"); 

      doc.Element("response").Elements().ToList().ForEach(e => 
       { 
        string number = e.Element("Detail").Element("number").Value; 
        string date = e.Element("FromDate").Element("date").Value; 

        Console.WriteLine("Number - {0}.Date - {1}\n", number, date); 
       }); 

      Console.ReadKey(); 
     } 
    } 
} 

Ausgang:

Output in Visual Studio

+0

Ausgezeichnete Antwort Mann, das ist genau das, was ich gesucht habe. – Sizons

+0

Wenn ich das obige "ToList", bekomme ich Werte. Wenn ich "ForEach" darauf lege, wird eine "Objektreferenz, die nicht auf eine Instanz eines Objekts gesetzt ist" ausgelöst. Ich habe versucht, zu prüfen, ob der Wert Null ist, bevor ich ihn zuweist. Funktioniert nicht. – Learner

+0

1) Kopieren Sie die Eingabedatei genauso wie in meiner Antwort2) Kopieren Sie den Code genau so, wie er in meiner Antwort ist. –

Verwandte Themen