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";
}
我在尝试替换 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";
}