我的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。我怎样才能做到这一点。
发布于 2014-01-10 02:42:07
尝试下面的代码来迭代所有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";发布于 2014-01-10 02:41:57
那是因为你在使用FirstOrDefault。为了实现你想要的,请按以下步骤做:
xDoc.Root.Elements("Ranges")
.Elements("GridRange")
.Elements("ColumnID")
.Where(xe => xe.Value == "991")
.ToList()
.ForEach(el => el.Value = "1000");https://stackoverflow.com/questions/21035161
复制相似问题