尝试替换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>
非常感谢任何帮助!
答案 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";
}