首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用相同的元素名更新没有属性的xDoc

用相同的元素名更新没有属性的xDoc
EN

Stack Overflow用户
提问于 2014-01-10 02:26:39
回答 2查看 39关注 0票数 0

我的XML如下所示:

代码语言:javascript
复制
<?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,而不是第二个。

代码语言:javascript
复制
 XElement columnID = xProperty.Root.Elements("Ranges").Elements("GridRange").Elements("ColumnID").FirstOrDefault();
 if (null != columnID && Convert.ToInt64(columnID.Value) == 991)  
    columnID.Value = "1000";

但我希望两个ColumnID元素值都是1000。我怎样才能做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-10 02:42:07

尝试下面的代码来迭代所有GridRange元素并计算ColumnID元素的值。

代码语言:javascript
复制
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吗?

编辑-不需要转换

如果不需要转换,那么这段代码就会变得非常容易并被缩短。

代码语言:javascript
复制
foreach (var xElem in xProperty.Descendants("GridRange").Elements("ColumnID").Where(x => x.Value.Equals("991")))
            xElem.Value = "1000";
票数 2
EN

Stack Overflow用户

发布于 2014-01-10 02:41:57

那是因为你在使用FirstOrDefault。为了实现你想要的,请按以下步骤做:

代码语言:javascript
复制
xDoc.Root.Elements("Ranges")
         .Elements("GridRange")
         .Elements("ColumnID")
         .Where(xe => xe.Value == "991")
         .ToList()
         .ForEach(el => el.Value = "1000");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21035161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档