我有一个XML文件,其格式如下,
<Mapping name="abc">
<Attribute name="a1" value="a2" />
<Attribute name="..." value="..." />
</Mapping>
Run Code Online (Sandbox Code Playgroud)
我想提取所有对的Attribute名称和值,其中Mapping名称是"abc"(它发生在文件的多个部分).我怎样才能做到这一点?
一个的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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者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);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |