将元素添加到xml节点
问题描述:
我到目前为止,但是如何在第三位添加XElement
而不是第一位?将元素添加到xml节点
我必须将它添加到2个大文件。
protected void Button1_Click(object sender, EventArgs e)
{
var xml = XElement.Load(Server.MapPath(map1));
var noprovider = xml.Elements("Component").Where(d => !d.Elements("L").Any());
var prov in noprovider)
{
prov.AddFirst(new XElement("L", ""));
}
xml.Save(Server.MapPath(map1));
}
的XML
<Reservedele>
<Component>
<Type>Støvsuger</Type>
<Art>yiryidryi</Art>
<Bemærkning> adadgadg</Bemærkning>
<Varenummer>dfgdfg</Varenummer>
<OprettetAf>John</OprettetAf>
<Date>28. januar 2017</Date>
</Component>
</Reservedele>
答
我不确定要理解你的问题。你的意思是这样吗?
using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;
namespace XmlTest
{
class Program
{
static void Main(string[] args)
{
var xmlText = @"
<Reservedele>
<Component>
<Type>Støvsuger</Type>
<Art>yiryidryi</Art>
<Bemærkning> adadgadg</Bemærkning>
<Varenummer>dfgdfg</Varenummer>
<OprettetAf>John</OprettetAf>
<Date>28. januar 2017</Date>
</Component>
</Reservedele>";
using (var sr = new StringReader(xmlText))
{
var xml = XElement.Load(sr);
var noprovider = xml.Elements("Component").Where(d => !d.Elements("L").Any());
noprovider.Elements().ElementAt(1).AddAfterSelf(new XElement("L", ""));
//noprovider.Elements("Art").First().AddAfterSelf(new XElement("L", ""));
Console.WriteLine(xml.ToString());
}
Console.WriteLine("\nPress any key ...");
Console.ReadKey();
}
}
}
答
我会建议你使用
System.Xml.XmlDocument myDoc = new System.Xml.XmlDocument();
try
{
myDoc.Load(XMLFullFileName);
}
catch (Exception e)
{
throw new Exception("Loading failed!", e);
}
然后你可以遍历myDoc及其所有子和元素和追加或插入你的愿望。看看XmlDocument-Class
+1
从'XDocument'切换到'XmlDocument'是不必要的,并且不提供任何好处。另外,你没有回答这个问题。 – Amy
答
检查XmlNode.InsertAfter和XmlNode.InsertBefore方法。访问https://msdn.microsoft.com/en-us/library/system.xml.xmlnode.insertbefore(v=vs.110).aspx
谢谢@Tomas Jakl。它像一个魅力。 – TheNewone
@TheNewone如果答案正确,请考虑将其标记为已接受 –
@ Dan-homola。你是对的。完成。 – TheNewone