代码之家  ›  专栏  ›  技术社区  ›  Vibin Jith

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

  •  3
  • Vibin Jith  · 技术社区  · 16 年前

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

    它不工作。错误显示

    Sequence contains more than one element
    

    <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 回复  |  直到 16 年前
        1
  •  1
  •   Cornelius    16 年前

    MyNewUserPermission.Descendants("menuNode") 将返回多个值,而不是单个操作所需的一个值。

    .First 操作而不是 .Single MyNewUserPermission.Root.SetAttributeValue("userId", Me.UserId) 如果menuNode是文档的根。

    如果您想设置所有menuNode元素的属性(包括嵌套的属性),那么循环所有 MyNewUserPermission.Descendants(“menuNode”) 元素并设置每个元素的属性。