从XML文件中提取值

时间:2011-07-05 19:05:11

标签: c# xml

我有一个XML文件,其格式如下,

<Mapping name="abc">
  <Attribute name="a1" value="a2" />
  <Attribute name="..." value="..." />
</Mapping>

我想提取Attribute名称为Mapping的所有"abc"名称和值对(它出现在文件的多个部分中)。我怎么能这样做?

2 个答案:

答案 0 :(得分:5)

XDocument和XPath表达式似乎是实现此目的的一种非常简单的方法:

using System;
using System.Xml.Linq;
using System.Xml.XPath;

class Program
{
    static void Main()
    {
        var doc = XDocument.Load("test.xml");
        var values = doc.XPathSelectElements("//Mapping[@name='abc']");
        foreach (var item in values)
        {
            foreach (var att in item.Elements("Attribute"))
            {
                var name = att.Attribute("name").Value;
                var value = att.Attribute("value").Value;
                Console.WriteLine("{0}: {1}", name, value);
            }
        }
    }
}

XmlReader如果XML文档非常大且无法放入内存中:

using System;
using System.Xml;

class Program
{
    static void Main()
    {
        using (var reader = XmlReader.Create("test.xml"))
        {
            bool reading = false;
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element && reader.Name == "Mapping")
                {
                    var name = reader.GetAttribute("name");
                    reading = name == "abc";
                }

                if (reading && reader.NodeType == XmlNodeType.Element && reader.Name == "Attribute")
                {
                    var name = reader.GetAttribute("name");
                    var value = reader.GetAttribute("value");
                    Console.WriteLine("{0}: {1}", name, value);
                }
            }
        }
    }
}

答案 1 :(得分:1)

您可以使用LINQ to XML。

var items = from item in purchaseOrder.Descendants("Mapping")
            where (string) item.Attribute("name") == "abc"
            select new
            {
                Name = (string) item.Element("name"),
                Value = (string) item.Element("value")
            };