日期:2014-05-20  浏览次数:20944 次

linq to xml 查询问题
首先我想问下XML我这样写可以么?
<root>
  <T name=t1>
  <D name=d1>ddd</D>
  <D name=d2>ccc</D>
  </T>
  <T name=t2>
  </T>
</root>

我想是这样查,先查根据name查到匹配的T,再在T中查到匹配name的D,更改D的value,如果T中不存在D的话,就新加一个D,并设置name和value

本来使用XPATH直接可以得到匹配name的T的,但是再用LINQ去查匹配的D的name我就不会了
或者,可以直接用linq来写完全过程么?

------解决方案--------------------
XDocument doc = XDocument.Load("test.xml");
var nodes = from h in doc.Descendants("T")
where h.Attribute("name").Value == "t1"
select h;
if (nodes.Descendants("D").Count() > 0)
{
foreach (var item in nodes.Descendants("D"))
{
item.Value = "要修改的值";
doc.Save("test.xml");
}
}
else
{
XElement newEl = new XElement("D", new XAttribute("name", "要设定的name值"));
nodes.First().Add(newEl);
doc.Save("test.xml");
}
试试
------解决方案--------------------
探讨
或者,可以直接用linq来写完全过程么?

------解决方案--------------------
探讨

引用:

XDocument doc = XDocument.Load("test.xml");
var nodes = from h in doc.Descendants("T")
where h.Attribute("name").Value == "t1"
select h;……


我这里提示说没有Descendants啊,我是WPF,需要加什么引用么?……

------解决方案--------------------
.net4.0没选错吧