2016-12-01 4 views
0

Ich habe eine XML-Datei erhalten, die wie folgt aussieht:Wie die Werte der untergeordneten Knoten aus mehreren identischen Knoten von XML mit Linq to XML

<injuryRespData> 
    <lc01s> 
    <lc01> 
     <aac001>1</aac001> 
     <alca02>2</alca02> 
     <aab001>3</aab001> 
    </lc01> 
    <lc01> 
     <aac001>4</aac001> 
     <alca02>5</alca02> 
     <aab001>6</aab001> 
    </lc01> 
    <lc01> 
     <aac001>7</aac001> 
     <alca02>8</alca02> 
     <aab001>9</aab001> 
    </lc01> 
    </lc01s> 
</injuryRespData> 

Ich habe eine Klasse und Listen Einheit:

public class lc01 
{ 
    public string aac001{set;get;} 
    public string alca02{set;get;} 
    public string aab001{set;get;} 
} 
List<lc01> list = new List<lc01>(); 

Wie kann ich die Werte der untergeordneten Knoten unter mehreren lc01 Knoten erhalten und mit Linq to XML zur List-Auflistung hinzufügen?

+2

Verwenden 'XmlSerializer' Sie bereits eine Klasse haben, die Daten darstellt, die Sie benötigen . – Fabio

Antwort

0

ich das Problem selbst gelöst:

var xml = @"<injuryRespData> 
    <lc01s> 
    <lc01> 
     <aac001>1</aac001> 
     <alca02>2</alca02> 
     <aab001>3</aab001> 
    </lc01> 
    <lc01> 
     <aac001>4</aac001> 
     <alca02>5</alca02> 
     <aab001>6</aab001> 
    </lc01> 
    <lc01> 
     <aac001>7</aac001> 
     <alca02>8</alca02> 
     <aab001>9</aab001> 
    </lc01> 
    </lc01s> 
</injuryRespData>"; 

XElement xmlDoc = XElement.Parse(xml); 
List<lc01> lc01List = new List<lc01>(); 
lc01List.clear(); 
foreach (XElement item in RespDoc.Descendants("lc01")) 
{ 
    lc01 temp = lc01() 
    { 
     aac001 = item.Element("aac001").Value, 
     alca02 = item.Element("alca02").Value, 
     aab001 = item.Element("aab001").Value 
    } 
    lc01List.Add(lc01); 
} 
0

Sie könnten diese Descendants und Select Methoden tun:

List<lc01> list=doc.Root.Descendants("lc01") 
        .Select(e=>new lc01{aac001=(string)e.Element("aac001"), 
             alca02=(string)e.Element("alca02"), 
             aab001=(string)e.Element("aab001") 
             }) 
        .ToList(); 
0
var xml = @"<injuryRespData> 
    <lc01s> 
    <lc01> 
     <aac001>1</aac001> 
     <alca02>2</alca02> 
     <aab001>3</aab001> 
    </lc01> 
    <lc01> 
     <aac001>4</aac001> 
     <alca02>5</alca02> 
     <aab001>6</aab001> 
    </lc01> 
    <lc01> 
     <aac001>7</aac001> 
     <alca02>8</alca02> 
     <aab001>9</aab001> 
    </lc01> 
    </lc01s> 
</injuryRespData>"; 

var result = (
    from x in XDocument.Parse(xml).Descendants("lc01").Cast<XElement>() 
    select new XmlSerializer(typeof(lc01)).Deserialize(new StringReader(x.ToString()))).ToList();