Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编辑XML属性会导致创建新节点_C#_Xml_Linq To Xml_Xmldocument - Fatal编程技术网

C# 编辑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

当我尝试更新XML文档中的一个值时,它不编辑现有的值,而是不断用我的新值插入一个新节点

如果你试过这两种方法,结果都是一样的

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!");