LINQ to XML替换值问题

时间:2015-03-21 01:26:52

标签: c# linq-to-xml

尝试替换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,则表示Value = ORIG VALUE。所以我认为我可以改变它,我希望看到像这样的东西

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

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

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

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

select el.Descendants("value");

答案 1 :(得分:0)

目前,您选择<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>,请将for循环内容更改为:

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