C# 更新特定的XML节点
我不熟悉XML文件以及如何管理它们。这是我正在编写的一个web应用程序(aspx) 目前,我能够找到节点的第一个实例,并使用以下代码向其添加一个项目:C# 更新特定的XML节点,c#,asp.net,xml,linq-to-xml,C#,Asp.net,Xml,Linq To Xml,我不熟悉XML文件以及如何管理它们。这是我正在编写的一个web应用程序(aspx) 目前,我能够找到节点的第一个实例,并使用以下代码向其添加一个项目: xmlClone.Element("PCs").Element("PC").Element("pc_hwStatus").AddAfterSelf(new XElement("user_name", txt_v0_nombre.Text)); 我真正想要的是将(“user_name”,txt_v0_nombre.Text)添加到特定的节点,而不
xmlClone.Element("PCs").Element("PC").Element("pc_hwStatus").AddAfterSelf(new XElement("user_name", txt_v0_nombre.Text));
我真正想要的是将(“user_name”,txt_v0_nombre.Text)添加到特定的节点,而不是第一个节点。我的XML文件的内容是:
<PCs>
<PC>
<pc_name>esc01</pc_name>
<pc_ip>10.10.10.10</pc_ip>
<pc_hwStatus>Working</pc_hwStatus>
</PC>
<PC>
<pc_name>esc02</pc_name>
<pc_ip>10.10.10.11</pc_ip>
<pc_hwStatus>Under Maintenance</pc_hwStatus>
</PC>
</PCs>
esc01
10.10.10.10
工作
esc02
10.10.10.11
维修中
从下拉列表中选择一个项目(PC名称)来决定更新哪个节点
在我的当前代码中,新项目始终添加为带有“pc”的节点的最后一行_
名称=esc01”。我想能够添加到esc02或esc03等。。。如何做到这一点?(使用xdocument)方法
.Element
返回具有指定名称的第一个元素
您可以使用方法
.Elements
获取整个列表,然后迭代此列表以找到您要查找的列表。如果我理解正确,您要查找的是FirstOrDefault
扩展方法。在这里指定您想要的节点,在本例中是下拉框中的字符串,可以传入该字符串。因此,要获得第一个节点:
var pc = xmlClone.Element("PCs").Elements("PC").FirstOrDefault(e => e.Element("pc_name").Value == "esc01");
现在,您的XElement中包含以下内容:
<PC>
<pc_name>esc01</pc_name>
<pc_ip>10.10.10.10</pc_ip>
<pc_hwStatus>Working</pc_hwStatus>
</PC>
用这个
.FirstOrDefault(e => e.Element("pc_name").Value == desiredPC);
其中,desiredPC
是xml节点的值:pc\u name
现在要添加数据,只需调用普通的旧add
方法:
pc.Add(new XElement("user_name", txt_v0_nombre.Text);
这应该对您有帮助。这里有一个解决方案,它使用LINQ查询语法和LINQ to XML:
XDocument document=XDocument.Parse(xmlContent);
字符串pcName=“esc02”;
IEnumerable查询=
来自文件中的pc。元素(“pc”)。元素(“pc”)
其中pc.Element(“pc_name”).Value.Equals(pcName)
选择pc;
XElement xe=query.FirstOrDefault();
如果(xe!=null)
{
添加(新的XElement(“用户名”、“DMS”);
}
我已将您的示例数据和此查询合并到演示程序中。请参见下面的演示程序输出以及程序本身
预期产出
esc02
10.10.10.11
维修中
DMS
演示计划
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Xml.Linq;
名称空间LinqToXmlDemo
{
公共课程
{
公共静态void Main(字符串[]args)
{
字符串xmlContent=GetXml();
XDocument document=XDocument.Parse(xmlContent);
XElement xe=FindPCName(文件“esc02”);
如果(xe!=null)
{
添加(新的XElement(“用户名”、“DMS”);
控制台写入线(xe);
}
其他的
{
WriteLine(“查询没有返回结果”);
}
}
私有静态XElement FindPCName(XDocument文档,字符串pcName)
{
IEnumerable查询=
来自文件中的pc。元素(“pc”)。元素(“pc”)
其中pc.Element(“pc_name”).Value.Equals(pcName)
选择pc;
返回query.FirstOrDefault();
}
私有静态字符串GetXml()
{
返回
@"
esc01
10.10.10.10
工作
esc02
10.10.10.11
维修中
";
}
}
}
pc.Add(new XElement("user_name", txt_v0_nombre.Text);