我有一个如下所示的xml文件,我需要在c#中编辑它以插入一个新节点:
<?xml version="1.0" encoding="utf-8"?>
<Users>
<User>
<Name>John Smith</Name>
<test>
<Date>23.05.2011</Date>
<points>33</points>
</test>
<test>
<Date>22.06.2011</Date>
<points>29</points>
</test>
</User>
<User>
<Name>David Chris</Name>
<test>
<Date>01.02.2009</Date>
<points>25</points>
</test>
<test>
<Date>14.01.2010</Date>
<points>231</points>
</test>
</User>
我需要在用户名为“John Smith”的所有子元素中插入另一个“在此示例中为第三个”元素。 所以xml将成为:
<?xml version="1.0" encoding="utf-8"?>
<Users>
<User>
<Name>John Smith</Name>
<test>
<Date>23.05.2011</Date>
<points>33</points>
</test>
<test>
<Date>22.06.2011</Date>
<points>29</points>
</test>
<test>
<Date>30.10.2011</Date>
<points>21</points>
</test></b>
</User>
<User>
<Name>David Chris</Name>
<test>
<Date>01.02.2009</Date>
<points>25</points>
</test>
<test>
<Date>14.01.2010</Date>
<points>231</points>
</test>
</User>
任何帮助都非常感谢.. 非常感谢..
答案 0 :(得分:2)
class Program
{
static void Main()
{
var doc = XDocument.Load("test.xml");
var johnSmith = doc
.Descendants("User")
.Descendants("Name")
.Where(x => x.Value == "John Smith")
.Select(x => x.Parent)
.First();
johnSmith.Add(
new XElement("test",
new XElement("Date", "30.10.2011"),
new XElement("points", "21")
)
);
doc.Save("new.xml");
}
}
答案 1 :(得分:2)
简单(假设您使用的是.NET 3.5或更高版本):
XDocument.Load
)XElement
,找到插入点,调用insertionPoint.Add(newElement)
)XDocument.Save
)LINQ to XML使几乎所有基于XML的任务都比旧API更简单......如果上面的内容不够好,我强烈建议您阅读LINQ to XML教程。
没有简单的方法可以插入新元素而不用完全读取旧文件,操作它然后完全写出来。从理论上讲,可以以XmlReader
和XmlWriter
的流式方式进行操作,但它们几乎总是比它们的价值更麻烦。
答案 2 :(得分:0)
XDocument
XmlDocument
答案 3 :(得分:0)
你走了:
class Program
{
static void Main(string[] args)
{
XElement main = XElement.Load(@"users.xml");
// write new data to new file
string newDate = "01.01.2012";
string newPoints = "42";
main.Descendants("User")
.Descendants("Name")
.Where(e => e.Value == "John Smith")
.Select(e => e.Parent)
.First()
.Add(new XElement("test",
new XElement("date", newDate),
new XElement("points", newPoints)
)
);
main.Save("users2.xml");
}
}