当我尝试更新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!";
和
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(oLine.ExtraData);
XmlNodeList nodes = xmlDoc.SelectNodes(
"extradata/SharedCustomAppData/clsNameValues/clsnamevalue");
foreach (XmlNode node in nodes)
{
XmlNode nameNode = node.SelectSingleNode("name");
if (nameNode != null && nameNode.Attributes["Value"].Value == "SHOP_FLOOR_INSTR")
{
XmlNode valueNode = node.SelectSingleNode("value");
if (valueNode != null)
{
valueNode.Attributes["Value"].Value = line.SHOP_FLOOR_INSTR;
}
}
}
我正在尝试更新的XML部分如下所示:
<SharedCustomAppData>
<clsNameValues>
<clsnamevalue>
<name Value="SHOP_FLOOR_INSTR" />
<value Value="Current value" />
</clsnamevalue>
</clsNameValues>
</SharedCustomAppData>
答案 0 :(得分:0)
在赋值语句中,元素名称不应该是“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!";
答案 1 :(得分:0)
你可以使用 System.Xml.XPath 扩展Linq到Xml(我相信代码看起来更短):
var expression = "//extradata/SharedCustomAppData/clsNameValues/clsnamevalue[name/@Value='SHOP_FLOOR_INSTR']/value";
XElement valueElement = xdoc.XPathSelectElement(expression);
if (valueElement != null)
valueElement.SetAttributeValue("Value", "Changed!");
还要注意命名空间(如果在父节点上声明了某些命名空间,则从您的示例xml中不清楚)。