繁体   English   中英

如何使用C#更新XMLDocument?

[英]How to update the XMLDocument using c#?

我想更新xml文档,我需要以字符串形式返回更新的xml。 我正在尝试如下。 当我保存文档时,它需要文件名。 但我不想将此保存为文件。 我只想获取字符串中更新的xml。

        string OldXml = @"<Root>
                                  <Childs>
                                    <first>this is first</first>
                                    <second>this is second </second>
                                  </Childs        
                                  </Root>";

        XmlDocument NewXml = new XmlDocument();
        NewXml.LoadXml(OldXml );

        XmlNode root = NewXml.DocumentElement;
        XmlNodeList allnodes = root.SelectNodes("*");

        foreach (XmlNode eachnode in allnodes)
        {
            if (eachnode.Name == "first")
            {
                eachnode.InnerText = "1";
            }
        }

        NewXml.Save();
        string newxml = NewXml.OuterXml;

您不需要调用Save method因为string是不可变的,您的问题出在root.SelectNodes("*") ,它仅获取子节点,而不是所有级别的节点。 您需要再上一层:

  foreach (XmlNode eachnode in allnodes)
        {
            var firstNode = eachnode.ChildNodes.Cast<XmlNode>()
                              .SingleOrDefault(node => node.Name == "first");
            if (firstNode != null)
            {
                firstNode.InnerText = "1";
            }
        }


  string newxml = NewXml.OuterXml;

强烈建议使用LINQ to XML,它更简单:

var xDoc = XDocument.Parse(OldXml);
foreach (var element in xDoc.Descendants("first"))
    element.SetValue(1);

string newXml = xDoc.ToString();

您的迭代永远不会到达称为“第一”的节点。 否则,无需保存NewXml就可以正常工作。

但是,您可以使用XElement并遍历所有后代。

   string OldXml = @"<Root>
                      <Childs>
                      <first>this is first</first>
                      <second>this is second </second>
                      </Childs>        
                      </Root>";

            var NewXml = XElement.Parse(OldXml);
            foreach (var node in NewXml.Descendants())
            {
                if (node.Name.LocalName == "first")
                {
                    node.Value = "1";
                }
            }
            var reader = NewXml.CreateReader();
            reader.MoveToContent();
            string newxml = reader.ReadInnerXml();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM