如何使用Linq查询更新xml中的节点属性?

时间:2010-03-05 06:35:15

标签: linq

Hai我有一个XDocument。本文档中的所有节点都有一个UserId属性。我想将此属性0的值更改为1.如何使用Linq查询执行此操作。我用过这个。

MyNewUserPermission.Descendants("menuNode").Single.SetAttributeValue("userId", Me.UserId)

它不是Working.Error显示

Sequence contains more than one element

XMLFILE

<menuNode url="" title="Register" id="mnuMainRegister" value="true" userId ="0">
      <menuNode url="Company.aspx?Name=Company" title="Company" id="mnuCompany" value="true" userId ="0"/>
      <menuNode url="Company.aspx?Name=User" title="SubCategory" id="mnuSubcategory" value="true" userId ="0"/>
      <menuNode url="Common.aspx?Name=Category" title="Category" id="mnuCategory" value="true" userId ="0"/>
      <menuNode url="Common.aspx?Name=Employee" title="Employee" id="mnuEmployee" value="true" userId ="0"/>
      <menuNode url="Common.aspx?Name=Product" title="Product" id="mnuProduct" value="true" userId ="0"/>
      <menuNode url="Common.aspx?Name=SaleArea" title="SaleArea" id="mnuSaleArea" value="true" userId ="0"/>
      <menuNode url="Common.aspx?Name=SalePlace" title="SalePlace" id="mnuPlace" value="true" userId ="0"/>
    </menuNode>

我不知道这可以使用linq完成。其他明智的只是告诉我的代码有什么不对。

1 个答案:

答案 0 :(得分:1)

由于menuNode包含嵌套的menuNodes,因此单个操作将引发异常,因为MyNewUserPermission.Descendants("menuNode")将返回多个值,而不是单个操作所需的一个值。

如果menuNode是文档的根目录,请尝试.First操作而不是.Single操作或MyNewUserPermission.Root.SetAttributeValue("userId", Me.UserId)

如果要设置所有menuNode元素的属性(包括嵌套的属性),则遍历所有MyNewUserPermission.Descendants("menuNode")元素并设置每个元素的属性。