Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Linq查询更新xml中的节点属性?_Linq - Fatal编程技术网

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

如何使用Linq查询更新xml中的节点属性?,linq,Linq,我有一个XDocument。此文档中的所有节点都有一个属性UserId。我想将此属性的值0更改为1。如何使用Linq查询实现这一点。我用过这个 MyNewUserPermission.Descendants("menuNode").Single.SetAttributeValue("userId", Me.UserId) 它不工作。显示错误 Sequence contains more than one element xml文件 <menuNode url="" title="Reg

我有一个XDocument。此文档中的所有节点都有一个属性UserId。我想将此属性的值0更改为1。如何使用Linq查询实现这一点。我用过这个

MyNewUserPermission.Descendants("menuNode").Single.SetAttributeValue("userId", Me.UserId)
它不工作。显示错误

Sequence contains more than one element
xml文件

<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来完成。另一方面,请告诉我的代码有什么问题。

由于您的菜单节点包含嵌套的菜单节点,因此单个操作将引发异常,如
MyNewUserPermission。子体(“菜单节点”)
将返回多个值,而不仅仅是单个操作所需的一个值

尝试
.First
操作,而不是
.Single
操作,或者如果menuNode是文档的根,则尝试
MyNewUserPermission.Root.SetAttributeValue(“userId”,Me.userId)


如果要设置所有Menuode元素的属性(包括嵌套的属性),请循环所有
MyNewUserPermission.subjections(“Menuode”)
元素并设置每个元素的属性。

能否显示XML文档?或者至少是你试图更新的部分?现在告诉你,我更新了我的问题。谢谢你,我是在不使用循环的情况下问你,我能做同样的事情吗?如果你想更新每个节点,那么你需要一个循环。Linq很适合查询,但一般来说,更新集合中的多个项仍然需要循环。