原来用xpath来创建和遍历xml,现在发现用linq更加方便,故记下相关用法。
LINQ创建XML树(C#)
XElement Employees =
new XElement("Employees",
new XElement("Employee",
new XElement("Name","Partrick"),
new XElement("Phone","206-555-0144",
new XAttribute("Type","Home")),
new XElement("phone","425-555-0145",
new XAttribute("Type","Work")),
new XElement("Address",
new XElement("Street1","123 Main St"),
new XElement("City","Mercer Island"),
new XElement("State","WA"),
new XElement("Postal","68042")
)
)
);
产生一个Eemployee.XML文件如下:
<Employees>
<Employee>
<Name>Partrick</Name>
<sex>Man</sex>
<Phone Type='Home'>206-555-0144</Phone>
<Phone Type='Work'>425-555-0145</Phone>
<Address>
<Stree1>123 Main St</Stree1>
<City>Mercer Island</city>
<Postal>68042</Postal>
</Address>
</Employee>
</Employees>
通过LINQ查询相关数据
1)查找一个姓名为“Partrick”的人性别
IEnumerable<string> _sex =
from _elem in Employees.Descendants("Employee")
select (string) _elem.Arrribute("sex");
_sex.First<string>(); --此句就可以得到sex属性的值 man
Descendants(XName)按文档顺序返回此文档或元素的经过筛选的子代元素集合。集合中只包括具有匹配 XName的元素。
此句也可以这样写
IEnumerable<string> _sex =
from _elem in Employees.Elements("Employee")
select (string) _elem.Arrribute("sex");
2)如果要找一个work类型的电话
IEnumerable<XElement> items =
from _elem in Employees.Elements("Phone")
where _elem.Attribute("Type").Value=="Work"
select (string) item;另一种写法:
IEnumerable<XElement> items =
from _elem in Employees.Elements("Phone")
select (string) item;foreach(XElement _node in items)
{
if(_node.Attribute("Type").Value == "Work")
{
string phone = _node.Value;
}
}
下面一种循环写法,用处较多
还有SetElementValue可以修改节点中的数据 SetElementValue(节点名,数据);
这些是基本方法,如要进一步深入研究,可以查看Msdn