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完成。其他明智的只是告诉我的代码有什么不对。
答案 0 :(得分:1)
由于menuNode包含嵌套的menuNodes,因此单个操作将引发异常,因为MyNewUserPermission.Descendants("menuNode")
将返回多个值,而不是单个操作所需的一个值。
如果menuNode是文档的根目录,请尝试.First
操作而不是.Single
操作或MyNewUserPermission.Root.SetAttributeValue("userId", Me.UserId)
。
如果要设置所有menuNode元素的属性(包括嵌套的属性),则遍历所有MyNewUserPermission.Descendants("menuNode")
元素并设置每个元素的属性。