C# 如何从XML文件中获取相关元素及其子元素?

C# 如何从XML文件中获取相关元素及其子元素?,c#,xml,C#,Xml,我必须解析由我们的销售团队生成的XML文件。XML如下所示: <?xml version="1.0" encoding="utf-8"?> <ArrayOfOrder> <Order> <Id>1</Id> <OrderGuid /> <BillingAddress> <Id>0</Id> <FirstName>Harvey&

我必须解析由我们的销售团队生成的XML文件。XML如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfOrder>
  <Order>
    <Id>1</Id>
    <OrderGuid />
    <BillingAddress>
      <Id>0</Id>
      <FirstName>Harvey</FirstName>
      <LastName>Danger</LastName>
    </BillingAddress>
    <OrderItems>
      <OrderItem>
        <ProductName>Silver Widgets</ProductName>
        <Price>9.99</Price>
        <Quantity>10</Quantity>
        <OrderDate>7/2/2014 2:05:00 PM</OrderDate>
        <Barcodes>
          <BarCode>
            <string>123CC2D68</string>
          </BarCode>
        </Barcodes>
      </OrderItem>
    </OrderItems>
  </Order>
</ArrayOfOrder>
我正在努力完成这样的事情

一, 哈维 危险


那么我如何设置相应Id的名字和姓氏呢

您可以获取帐单地址的XmlNode并使用FirstChild

您还可以选择SingleNode

下面是xPath语法指南


如果您在处理XML方面有一些灵活性,您应该考虑移到<强> LINQ到XML 。从MSDN开始:

LINQ to XML是一种最新的、经过重新设计的使用 XML。它提供了的内存中文档修改功能 文档对象模型(DOM),并支持LINQ查询表达式。 尽管这些查询表达式在语法上与 在XPath中,它们提供了类似的功能

还可以查看这两个API之间的一些基本区别

下面是一个完整的工作示例,它演示了LINQ to XML(
System.XML.LINQ
)在您提供的示例数据上的基本用法。在获得LINQ的基本知识之后,您可以做更多的事情。我想你会发现相对容易阅读,也很值得花时间。使用.NET编程时,LINQ本身将显著提高您的生产率

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Xml.Linq;
名称空间LinqToXmlDemo
{
公共课程
{
公共静态void Main(字符串[]args)
{
字符串xmlContent=GetXml();
XElement arrayOfOrder=XElement.Parse(xmlContent);
XElement顺序=ArrayForder.Element(“顺序”);
string orderId=(string)order.Element(“Id”);
XElement billingAddress=order.Element(“billingAddress”);
string firstName=(string)billingAddress.Element(“firstName”);
string lastName=(string)billingAddress.Element(“lastName”);
Console.WriteLine(“[{0}][{1}][{2}]”,
医嘱ID,
名字,
姓氏);
}
私有静态字符串GetXml()
{
返回
@"
1.
0
哈维
危险
银色小部件
9.99
10
2014年7月2日下午2:05:00
123CC2D68
";
}        
}
}

这解决了我提出的问题,因此我将问题标记为已回答。实际使用的XML有多个顺序,因此我正在研究如何使用包含的链接循环这些顺序。谢谢一个需要使用乘法器和循环的问题正是LINQ设计要解决的!LINQ通常使从任何类型的集合(或
IEnumerable
)中提取所需内容变得更加容易,作为传统
for
foreach
循环的替代方法。(但是,在定义LINQ查询之后,通常会在末尾使用一个非常简单的
foreach
循环。)…例如,请查看问题。您可以尝试修改我提供的示例来处理您的数据。
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(filePath);

    XmlElement root = xmlDoc.DocumentElement;
    XmlNodeList Order = root.SelectNodes("Order");

    string id1 = string.Empty;
    string firstName = string.Empty;
    string lastName = string.Empty;

    foreach(XmlNode order in Order)
    {
        id1 = order["Id"].InnerText;
        //firstName = order["BillingAddress/FirstName"].InnerText;
        //lastName = order["BillingAddress"].InnerText;
        firstName = order["FirstName"].InnerText;
        lastName = order["LastName"].InnerText;

        Console.WriteLine(id1);
        Console.WriteLine("\t" + firstName);
        Console.WriteLine("\t" + lastName);
    }