使用Linq从XML中检索ID和值列表

时间:2013-08-05 13:34:50

标签: .net xml linq

我正在用.NET开发一个应用程序。我有和XML查找表格式如下:

<root>
    <item ID="1">Value 1</item>
    <item ID="2">Value 2</item>
    <item ID="3">Value 3</item>
    ...
    <item ID="n">Value n</item>
</root>

我想检索一个包含所有ID的整数列表和一个包含所有值的字符串列表。 任何帮助都会非常感激。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

我建议您将商品转换为字典:

var xdoc = XDocument.Load(path_to_xml);
var items = xdoc.Root.Elements()
                .ToDictionary(i => (int)i.Attribute("ID"), i => (string)i);

现在所有ID都是字典的键,值是值:

var ids = items.Keys;
var values = items.Values;

您可以快速获得任何项目的价值:

string value = items[5];

答案 1 :(得分:1)

提供此内容存储在XML文件中:

XElement xe = XElement.Load(file);

List<int> Ids = new List<int>();
Ids = xe.Elements("item").Attributes("ID").Select (x => XmlConvert.ToInt32(x.Value)).Distinct().ToList();

List<string> Values = new List<string>();
Values = xe.Elements("item").Select (x => x.Value).Distinct().ToList();

答案 2 :(得分:1)

只是为了创建不同的解决方案 - 这个只做一次xml传递,解析值和id:

var doc = XDocument.Parse("<root><item ID=\"1\">Value1</item><item ID=\"2\">Value2</item><item ID=\"3\">Value3</item><item ID=\"4\">Value4</item></root>");
var IDs = new List<int>();
var Values = new List<string>();
foreach (var x in doc.Element("root").Elements("item").Select(x => new { Value = x.Value, ID = x.Attribute("ID").Value }))
  {
      IDs.Add(Convert.ToInt32(x.ID));
      Values.Add(x.Value);
  }

的ID

List<int>(4) { 1, 2, 3, 4 }

List<string>(4) { "Value1", "Value2", "Value3", "Value4" }