LINQ to XML 替换值问题

LINQ to XML Replace Value Issue

我在尝试替换 XElement 的值时遇到问题。我不确定我做错了什么。我的简化xml如下

<payload>
  <field name="SLUG_LOCATOR">
    <value>ORIG VALUE</value>
  </field>
</payload>

这是我的查询

IEnumerable<XElement> fields =
                    from el in doc.Descendants("field")
                    where el.Attribute("name").Value == "SLUG_LOCATOR"
                    select el;

foreach (XElement el in fields)
            {
                e.Value = "NEW VALUE";
            }

如果我在每个语句中检查 el,它表示值 = ORIG VALUE。所以我假设我可以改变它,我希望看到这样的东西

 <payload>
      <field name="SLUG_LOCATOR">
        <value>NEW VALUE</value>
      </field>
    </payload>

但这就是我得到的,我不知道为什么

 <payload>
    <field name="SLUG_LOCATOR">NEW VALUE</field>
</payload>

如有任何帮助,我们将不胜感激!

您正在获取包含属性的元素。试试这个来获取 value 子元素:

select el.Descendants("value");

目前,您选择的是 <field> 元素而不是 <value> 元素。这就是 <field> 的全部内容更改为 NEW VALUE 的原因。您可以简单地修改 LINQ 的 select 部分以进行最细微的更改以解决问题:

IEnumerable<XElement> values =
                    from el in doc.Descendants("field")
                    where el.Attribute("name").Value == "SLUG_LOCATOR"
                    select el.Element("value");

或者如果您需要保持选择 <field>s,则将 for 循环内容更改为:

foreach (XElement el in fields)
{
    el.Element("value").Value = "NEW VALUE";
}