查看元素ID

时间:2013-08-01 17:56:52

标签: c# xml linq

我在使用LINQ to XML从C#中的XML文件中的OrderProduct元素中检索“id”时遇到问题。我尝试了一个更简单的XML文件,并且能够检索多个元素。

C#仅检索第一个id = 542并且不循环到id = 543。我在这里做错了什么?

感谢。

--- [order.xml] -----------------------

<?xml version="1.0" encoding="utf-16"?>
<OrderXml>
  <Order ... >
    .
    .
    .
    <OrderProducts>
      <OrderProduct id="542"></OrderProduct>
      <OrderProduct id="543"></OrderProduct>
    </OrderProducts>
  </Order>
</OrderXml>

--- [C#] -----------------------

IEnumerable<XElement> OrderXml = xelement.Elements ();

foreach (var order in OrderXml)
  Console.WriteLine ("id: {0}", order.Element ("OrderProducts").Element ("OrderProduct").Attribute ("id").Value);

3 个答案:

答案 0 :(得分:1)

var xdoc = XDocument.Load(path_to_xml);

var productIds = from p in xdoc.Descendants("OrderProduct")
                 select (int)p.Attribute("id");

foreach (var id in productIds)
     Console.WriteLine ("id: {0}", id);

答案 1 :(得分:0)

诀窍是将指针设置在正确的位置:

查看Descendants

foreach (var order in OrderXml.Descendants("OrderProducts"))
{
    Console.WriteLine ("id: {0}", order.Element("OrderProduct").Attribute("id").Value);
}

答案 2 :(得分:0)

怎么样......

var ids = from el in OrderXml.Descendants("OrderProduct") select el.Attribute("id").Value;

foreach (var id in ids)
{
    Console.WriteLine("id: {0}", id);
}