C# 编辑XML属性会导致创建新节点
当我尝试更新XML文档中的一个值时,它不编辑现有的值,而是不断用我的新值插入一个新节点 如果你试过这两种方法,结果都是一样的C# 编辑XML属性会导致创建新节点,c#,xml,linq-to-xml,xmldocument,C#,Xml,Linq To Xml,Xmldocument,当我尝试更新XML文档中的一个值时,它不编辑现有的值,而是不断用我的新值插入一个新节点 如果你试过这两种方法,结果都是一样的 var doc = XDocument.Parse(xmlString); XElement shippingElement = (from xml2 in doc .Elements("extradata").Elements("SharedCustomAppData") .Elements("clsNameValues").Elements("clsname
var doc = XDocument.Parse(xmlString);
XElement shippingElement = (from xml2 in doc
.Elements("extradata").Elements("SharedCustomAppData")
.Elements("clsNameValues").Elements("clsnamevalue")
where xml2.Element("name").Attribute("Value").Value == "SHOP_FLOOR_INSTR"
select xml2).FirstOrDefault();
shippingElement.Element("value").Attribute("Value").Value = "Changed!";
及
我尝试更新的XML部分如下所示:
<SharedCustomAppData>
<clsNameValues>
<clsnamevalue>
<name Value="SHOP_FLOOR_INSTR" />
<value Value="Current value" />
</clsnamevalue>
</clsNameValues>
</SharedCustomAppData>
在赋值语句中,元素名称不应该是“name”而不是“value”吗 试试这个:
var doc = XDocument.Parse(xmlString);
XElement shippingElement = (from xml2 in doc
.Elements("extradata").Elements("SharedCustomAppData")
.Elements("clsNameValues").Elements("clsnamevalue")
where xml2.Element("name").Attribute("Value").Value == "SHOP_FLOOR_INSTR"
select xml2).FirstOrDefault();
shippingElement.Element("name").Attribute("Value").Value = "Changed!";
您可以将System.Xml.XPath扩展用于Linq到Xml(我相信代码看起来会更短):
还要注意名称空间(从示例xml中不清楚是否在父节点上声明了某些名称空间)。您的Linq to xml代码在此xml上运行良好。可以用额外的数据元素显示整个xml吗?它实际上是值。value是节点的名称,value是其中必须更改的值。不是我设计它的方式,但我无法改变。
var doc = XDocument.Parse(xmlString);
XElement shippingElement = (from xml2 in doc
.Elements("extradata").Elements("SharedCustomAppData")
.Elements("clsNameValues").Elements("clsnamevalue")
where xml2.Element("name").Attribute("Value").Value == "SHOP_FLOOR_INSTR"
select xml2).FirstOrDefault();
shippingElement.Element("name").Attribute("Value").Value = "Changed!";
var expression = "//extradata/SharedCustomAppData/clsNameValues/clsnamevalue[name/@Value='SHOP_FLOOR_INSTR']/value";
XElement valueElement = xdoc.XPathSelectElement(expression);
if (valueElement != null)
valueElement.SetAttributeValue("Value", "Changed!");