2017-10-14 43 views
0

我想從XML文件中獲取數據並將值存儲到C#變量列表中。所以,我可以用不同的方法來使用它also.Below是我的XML格式:如何使用c#中的LINQ從xml列表中獲取單個元素?

<fieldmetadata> 
<field> 
    <name>Object Text</name> 
    <datatype>Text</datatype> 
    <label>ABC</label> 
</field> 

<field> 
    <name>Object Short Text</name> 
    <datatype>String</datatype> 
    <label>PQR</label> 
</field> 

以下是我的C#代碼:

public List<string> getAllidentifiers() 
{  
    List<string> listx = new List<string>(); 

    XDocument xdoc = XDocument.Load(Path.GetTempPath() + "\\XMLFormat.xml"); 
    xdoc.Descendants("field").Select(p => new 
    { 
     name = p.Element("name").Value, 
     datatype = p.Element("datatype").Value, 
     label = p.Element("label").Value 
    }).ToList().ForEach(p => 
    { 
     listx.Add(p.name); 
     listx.Add(p.datatype); 
     listx.Add(p.label); 
    });  

    return listx; 
} 

我如何可以獲取列表元素的變量。

+1

那麼你想要檢索哪些數據?以什麼格式? –

+0

我想將xml列表數據轉換爲變量 – Vivek

+1

聽起來你應該創建一個類來表示一個字段,使用'Name','DataType'和'Label'屬性 - 你可以然後創建一個'List '。這就是你要找的東西嗎?你的問題目前還不清楚。 –

回答

1

由於當前的代碼只是返回一個字符串的平面列表,你可以這樣實現它:

var result = XDocument.Load("data.xml") 
         .Descendants("field") 
         .SelectMany(f => f.Elements().Select(e => e.Value)) 
         .ToList(); 

但我認爲一個更好的解決辦法是返回一個IEnumerablE<Field>,創建類型:

public class Field 
{ 
    public string Name { get; set; } 
    public string DataType { get; set; } 
    public string Label { get; set; } 
} 

和反序列化這樣的文件:

+0

我想將該xml數據存儲到列表中,然後在變量中獲取值。 – Vivek

+0

@Angad - 在變量*中取值的值不是很清楚。如果你只想要一個扁平的字符串集合,那麼答案就會顯示出來。否則,如果你想要3個列表,那麼對於每個字段,最好使用Field類,反序列化xml,然後使用linq'.Select'來檢索不同的屬性。 –

相關問題