我的XML看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<Properties>
<Ranges>
<GridRange>
<ColumnID>991</ColumnID>
<LowerBound>30</LowerBound>
<UpperBound>59</UpperBound>
</GridRange>
<GridRange>
<ColumnID>991</ColumnID>
<LowerBound>60</LowerBound>
<UpperBound />
</GridRange>
</Ranges>
</Properties>
我想将元素的值(当它是991时)更新到1000.我的代码只更新第一个到1000而不是第二个。
XElement columnID = xProperty.Root.Elements("Ranges").Elements("GridRange").Elements("ColumnID").FirstOrDefault();
if (null != columnID && Convert.ToInt64(columnID.Value) == 991)
columnID.Value = "1000";
但我希望ColumnID元素值都为1000.我如何实现这一点。
答案 0 :(得分:2)
尝试使用以下代码迭代所有GridRange
元素并评估ColumnID
元素的值。
Int64 columnID = Int64.MinValue;
foreach (var xElem in xProperty.Descendants("GridRange"))
{
columnID = Int64.MinValue;
var elem = xElem.Element("ColumnID");
if (elem == null || !Int64.TryParse(elem.Value, out columnID) || columnID != 991)
continue;
elem.Value = "1000";
}
现在您确定需要Int64
而不是Int32
吗? ColumnID
值是否可能超过2,147,483,647
?
编辑 - 没有转化
如果不需要转换,则此代码变得非常简单和短暂。
foreach (var xElem in xProperty.Descendants("GridRange").Elements("ColumnID").Where(x => x.Value.Equals("991")))
xElem.Value = "1000";
答案 1 :(得分:0)
那是因为你正在使用FirstOrDefault
。要实现您的目标,请执行以下操作:
xDoc.Root.Elements("Ranges")
.Elements("GridRange")
.Elements("ColumnID")
.Where(xe => xe.Value == "991")
.ToList()
.ForEach(el => el.Value = "1000");