【问题标题】:Set Attribute value in LINQ to XML在 LINQ to XML 中设置属性值
【发布时间】:2011-08-31 17:46:43
【问题描述】:

我是 LINQ to XML 的新手。我有两个变量 onetwo,我想在 XML 的属性中设置这些变量值。

 static void Main(string[] args)
    {
        string one = "first";
        string two = "Second";

        XDocument doc = XDocument.Load(test.xml);

    }

XML

    <Root>
  <Details XIndex="One" Index="">
    <abc></abc>
  </Details>
  <Details XIndex="Two" Index="">
    <xyz></xyz>
  </Details>
</Root>

现在请告诉我如何在 details 节点的 Index 属性中设置一个变量和两个变量的值。

示例 - 我想要下面的输出。

<Root>
  <Details XIndex="One" Index="First">
    <abc></abc>
  </Details>
  <Details XIndex="Two" Index="Second">
    <xyz></xyz>
  </Details>
</Root>

请告诉我。

提前致谢。

【问题讨论】:

    标签: xml linq linq-to-xml


    【解决方案1】:

    您可以使用XElement.SetAttributeValue() 方法:

    var element = doc.Elements("Details")
                     .Single(x=>x.Attribute("XIndex").Value=="One");
    
    element.SetAttributeValue("Index", "First");
    

    【讨论】:

    • var element = doc.Root.Elements("Details"); foreach (XElement ele in element) { if (ele.Attribute("XIndex").Value == "One") { ele.Attribute("Index").Value = one; } else if (ele.Attribute("XIndex").Value == "Two") { ele.Attribute("Index").Value = two; } }
    【解决方案2】:

    如果您要经常进行此调用,不妨将其放入辅助方法中,例如:

    private static void SetValueToDetailElement(XDocument doc, string xIndex, string value)
    {
      var detail = doc.Elements("Details").SingleOrDefault(x=>x.Attribute("XIndex").Value==xIndex);
      if(detail != null)
         detail.SetAttributeValue("Index", value);
    }
    

    然后在你的 main 中调用以下代码。

    SetValueToDetailElement(doc, "One", "First");
    SetValueToDetailElement(doc, "Two", "Second");
    

    【讨论】:

      【解决方案3】:

      这些家伙提供的答案不会写入 XML 有什么原因吗?也不例外,一切看起来都很好,只是没有写入文件。

      这是我的代码

      string file = "c:/message.xml";
      XDocument d = XDocument.Load(file);
      
      SetValueToIdElement(d, id, value);
      
      private static void SetValueToIdElement(XDocument doc, string Id, string value)
              {
                  var detail = doc.Elements("context").SingleOrDefault(x => x.Attribute("id").Value == Id);
                  if (detail != null)
                      detail.SetAttributeValue("value", value);
              }
      

      基本上和上面一样

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-02
        • 2020-08-28
        相关资源
        最近更新 更多