C# 使用LINQ to XML with C从XML文件检索多个项#

C# 使用LINQ to XML with C从XML文件检索多个项#,c#,linq-to-xml,C#,Linq To Xml,我是LinqtoXML新手,在编写C#从XML文件中检索多个项目时遇到了问题,例如在下面的代码示例中。我希望浏览该文件并检索每个OrderProduct id=???并获取数量和产品信息。我只能检索单个订单,但如果文件中有多个订单,则无法检索 这是我使用的C代码,它只检索第一个订单 xelement = XElement.Load (orderXML); IEnumerable<XElement> OrderXml = xelement.Elements (); foreach

我是LinqtoXML新手,在编写C#从XML文件中检索多个项目时遇到了问题,例如在下面的代码示例中。我希望浏览该文件并检索每个OrderProduct id=???并获取数量和产品信息。我只能检索单个订单,但如果文件中有多个订单,则无法检索

这是我使用的C代码,它只检索第一个订单

xelement = XElement.Load (orderXML);

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

foreach (var order in OrderXml.Elements ("OrderProducts"))
{
  m_productOrderID = order.Element ("OrderProduct").Attribute ("id").Value;
  m_productName = order.Element ("OrderProduct").Element ("Product").Element ("Name").Value;
  m_productCatalogNumber = order.Element ("OrderProduct").Element ("Product").Element ("CatalogNumber").Value;
  m_productQuantity = order.Element ("OrderProduct").Element ("Quantities").Element ("NumberOfCopies").Value;
}
xelement=xelement.Load(orderXML);
IEnumerable OrderXml=xelement.Elements();
foreach(OrderXml.Elements(“OrderProducts”)中的变量顺序)
{
m_productOrderID=order.Element(“OrderProduct”).Attribute(“id”).Value;
m_productName=order.Element(“OrderProduct”).Element(“产品”).Element(“名称”).Value;
m_productCatalogNumber=order.Element(“OrderProduct”).Element(“Product”).Element(“CatalogNumber”).Value;
m_productQuantity=order.Element(“OrderProduct”).Element(“数量”).Element(“NumberOfCopies”).Value;
}
XML文件:

<?xml version="1.0" encoding="utf-16"?>
<OrderXml>
  <Order>   
    <OrderProducts>
      <OrderProduct id="569">
        <Quantities>
          <NumberOfRecipients>1</NumberOfRecipients>
          <NumberOfCopies>1</NumberOfCopies>
          <TotalUnits>1</TotalUnits>
        </Quantities>
        <Product id="444">
          <Name>Product 1</Name>
          <CatalogNumber>20130621-001</CatalogNumber>
        </Product>
      </OrderProduct>

      <OrderProduct id="570">
        <Quantities>
          <NumberOfRecipients>1</NumberOfRecipients>
          <NumberOfCopies>100</NumberOfCopies>
          <TotalUnits>100</TotalUnits>
        </Quantities>
        <Product id="258">
          <Name>Product 2</Name>
          <CatalogNumber>20130621-002</CatalogNumber>
        </Product>
      </OrderProduct>
    </OrderProducts>
  </Order>
</OrderXml>

1.
1.
1.
产品1
20130621-001
1.
100
100
产品2
20130621-002
然后获取单订单产品:

var orderProduct = query.FirstOrDefault(x => x.Id == yourId);
if (orderProduct != null)
    // ...
获取所有ID:

var ids = xdoc.Descendants("OrderProduct")
              .Select(op => (int)op.Attribute("id"));

顺便说一句,下次提供您已经拥有的代码

那么到目前为止您尝试了什么?对于单个项目,您会怎么做?您是如何尝试调整的?(您谈论的是“下面的代码示例”,但我们只得到了XML…)我在原始消息中添加了C#。@jcyprich您的代码不起作用,因为您正在迭代
OrderProducts
元素(实际上只有一个这样的元素)。您应该迭代
OrderProduct
元素
var ids = xdoc.Descendants("OrderProduct")
              .Select(op => (int)op.Attribute("id"));