我必须解析由我们的销售团队生成的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>
我可以列出Order Node中的所有元素,然后我可以遍历特定节点的子节点。但是,我无法弄清楚如何从BillingAddress节点获取订单ID和相应的名字和姓氏。我已尝试过以下代码的许多不同变体,但无法解决此问题:
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);
}
我正在努力完成这样的事情
1 哈维 危险
那么我如何为相应的Id设置名字和姓氏?
答案 0 :(得分:1)
您可以获取结算地址的XmlNode并使用FirstChild
http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.firstchild.aspx
您也可以选择SelectSingleNode
http://msdn.microsoft.com/en-us/library/fb63z0tw.aspx
这是xPath语法指南
答案 1 :(得分:1)
如果您在使用XML方法方面有一定的灵活性,则应考虑转向 LINQ to XML 。来自MSDN上的LINQ to XML Overview:
LINQ to XML是一种最新的,经过重新设计的编程方法 XML。它提供了内存中的文档修改功能 文档对象模型(DOM),并支持LINQ查询表达式。 虽然这些查询表达式在语法上不同于 XPath,它们提供类似的功能。
另请参阅LINQ to XML vs. DOM,其中介绍了两个API之间的一些基本差异。
这是一个完整的工作示例,演示了LINQ to XML(System.Xml.Linq
)对您提供的示例数据的基本用法。获得LINQ的基本知识后,您可以做更多的事情。我认为您会发现Getting Started with LINQ in C#相对容易阅读,非常值得您花时间。在使用.NET编程时,LINQ本身将显着提高您的工作效率。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
namespace LinqToXmlDemo
{
public class Program
{
public static void Main(string[] args)
{
string xmlContent = GetXml();
XElement arrayOfOrder = XElement.Parse(xmlContent);
XElement order = arrayOfOrder.Element("Order");
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}]",
orderId,
firstName,
lastName);
}
private static String GetXml()
{
return
@"<?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>";
}
}
}