C# 读取一个xml元素,并在C中将元素的新值写回xml#
我正在尝试读取包含此元素的abc.xmlC# 读取一个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
<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教程。