我正在尝试从xml文档中获取具有给定值的所有元素“John”。
LINQ to XML可以实现吗?
我想要实现的是用“Wayne”替换所有“John”值。我知道这可以通过xslt轻松完成,但我需要通过代码来完成。
我的XML:
<Root>
<Parents>
<Parent>
<Name>John</Name>
<Age>18</Age>
</Parent>
<Parent>
<Name>John</Name>
<Age>25</Age>
</Parent>
<Parent>
<Name>Peter</Name>
<Age>31</Age>
</Parent>
</Parents>
</Root>
我试过这个:
XmlDocument doc = new XmlDocument();
doc.Load(@"C:/Temp/test.xml");
var elements = doc.Elements().Where(w => w.Value == "John");
foreach (var element in elements)
{
element.Value = "Wayne";
}
答案 0 :(得分:4)
您可以使用System.Xml.Linq.XDocument。它更容易使用。
XDocument doc = XDocument.Load(your file path);
var elements = doc.Descendants("Name").Where(i => i.Value == "John");
foreach (var element in elements)
{
element.Value = "Wayne";
}
doc.Save(your save file path);
这是输出:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Parents>
<Parent>
<Name>Wayne</Name>
<Age>18</Age>
</Parent>
<Parent>
<Name>Wayne</Name>
<Age>25</Age>
</Parent>
<Parent>
<Name>Peter</Name>
<Age>31</Age>
</Parent>
</Parents>
</Root>
答案 1 :(得分:0)
这是一种方法,它将获得具有值John的所有元素,无论哪个元素(尽管只在同一级别;您必须修改它以查看不同的级别;您可以使用描述的Descendants方法先前):
XDocument doc = XDocument.Load(@"C:\temp\test.xml");
var ns = doc.Root.GetDefaultNamespace();
var elements = doc.Element(ns + "Root").Element(ns + "Parents").Elements(ns + "Parent").Elements().Where(w => w.Value == "John");
foreach (var element in elements)
{
element.Value = "Wayne";
}
var stream = new FileStream(@"C:\temp\test.xml", FileMode.Create);
doc.Save(stream);