C# 读取一个xml元素,并在C中将元素的新值写回xml#

C# 读取一个xml元素,并在C中将元素的新值写回xml#,c#,.net,xml,C#,.net,Xml,我正在尝试读取包含此元素的abc.xml <RunTimeStamp> 9/22/2011 2:58:34 PM </RunTimeStamp> 2011年9月22日下午2:58:34 我试图读取xml文件所包含的元素的值,并将其存储在字符串中,一旦处理完成。我获取当前的时间戳并将新的时间戳写回xml文件 这是我到目前为止的代码,请帮助和指导,您的帮助将不胜感激 using Sy

我正在尝试读取包含此元素的abc.xml

            <RunTimeStamp>
            9/22/2011 2:58:34 PM
            </RunTimeStamp>

2011年9月22日下午2:58:34
我试图读取xml文件所包含的元素的值,并将其存储在字符串中,一旦处理完成。我获取当前的时间戳并将新的时间戳写回xml文件

这是我到目前为止的代码,请帮助和指导,您的帮助将不胜感激

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using log4net;
        using System.Xml;

        namespace TestApp
        {
            class TestApp
            {

                static void Main(string[] args)
                {

                    Console.WriteLine("\n--- Starting the  App --");

                    XmlTextReader reader = new XmlTextReader("abc.xml");

                    String DateVar = null;

                    while (reader.Read())
                    {
                        switch (reader.NodeType)
                        {

                            case XmlNodeType.Element: // The node is an element.
                                Console.Write("<" + reader.Name);
                                Console.WriteLine(">");
                                if(reader.Name.Equals("RunTimeStamp"))
                                {
                                    DateVar = reader.Value;
                                }
                                break;

                            case XmlNodeType.Text: //Display the text in each element.
                                Console.WriteLine(reader.Value);
                                break;

                            /*
                        case XmlNodeType.EndElement: //Display the end of the element.
                            Console.Write("</" + reader.Name);
                            Console.WriteLine(">");
                            break;
                             */
                        }
                    }
                    Console.ReadLine();

                    // after done with the processing.
                    XmlTextWriter writer = new XmlTextWriter("abc.xml", null);

                }
            }
        }
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用log4net;
使用System.Xml;
命名空间TestApp
{
类TestApp
{
静态void Main(字符串[]参数)
{
Console.WriteLine(“\n--启动应用程序--”);
XmlTextReader=新的XmlTextReader(“abc.xml”);
字符串DateVar=null;
while(reader.Read())
{
开关(reader.NodeType)
{
case XmlNodeType.Element://节点是一个元素。
控制台。写(“”);
if(reader.Name.Equals(“RunTimeStamp”))
{
DateVar=reader.Value;
}
打破
case XmlNodeType.Text://显示每个元素中的文本。
Console.WriteLine(reader.Value);
打破
/*
case XmlNodeType.EndElement://显示元素的结尾。
控制台。写(“”);
打破
*/
}
}
Console.ReadLine();
//处理完成后。
XmlTextWriter=newXMLTextWriter(“abc.xml”,null);
}
}
}
我个人不会在这里使用
XmlReader
等。我只需加载整个文件,最好使用LINQ to XML:

XDocument doc = XDocument.Load("abc.xml");
XElement timestampElement = doc.Descendants("RunTimeStamp").First();
string value = (string) timestampElement;

// Then later...
timestampElement.Value = newValue;
doc.Save("abc.xml");
简单多了

请注意,如果该值是XML格式的日期/时间,则可以转换为
DateTime

DateTime value = (DateTime) timestampElement;
随后:

timestampElement.Value = DateTime.UtcNow; // Or whatever
但是,这将只处理有效的XML日期/时间格式-否则您将需要使用
DateTime.TryParseExact
等。

我个人不会在这里使用
XmlReader
等。我只需加载整个文件,最好使用LINQ to XML:

XDocument doc = XDocument.Load("abc.xml");
XElement timestampElement = doc.Descendants("RunTimeStamp").First();
string value = (string) timestampElement;

// Then later...
timestampElement.Value = newValue;
doc.Save("abc.xml");
简单多了

请注意,如果该值是XML格式的日期/时间,则可以转换为
DateTime

DateTime value = (DateTime) timestampElement;
随后:

timestampElement.Value = DateTime.UtcNow; // Or whatever

但是,这将只处理有效的XML日期/时间格式—否则您将需要使用
DateTime.TryParseExact
等。

linq to XML是最好的方法。正如@Jon所示,linqtoxml是实现这一点的最佳方法,它更简单、更容易。如@Jon所示,更简单、更容易。谢谢,当我打印它时,会得到所有元素,我只需要元素的值,然后写回,你能建议我怎么做吗。同样在第一种方法中,我将如何获得的值并编写它。Thanks@Nomad:编辑了答案。但这只是LINQtoXML的一个很小的例子——我建议您花些时间阅读关于LINQtoXML的完整教程。这里有很多。非常感谢乔恩,真的很感谢你的帮助和时间,真的很棒。我一定会查找LINQ to xml教程。谢谢,当我打印它时,它会得到所有元素,我只需要元素的值,然后写回,你能建议我怎么做吗。同样在第一种方法中,我将如何获得的值并编写它。Thanks@Nomad:编辑了答案。但这只是LINQtoXML的一个很小的例子——我建议您花些时间阅读关于LINQtoXML的完整教程。这里有很多。非常感谢乔恩,真的很感谢你的帮助和时间,真的很棒。我一定会查找LINQ到xml教程。