如何在C#中读取和解析XML文件?
XmlDocument从字符串或文件中读取XML.
XmlDocument doc = new XmlDocument(); doc.Load("c:\\temp.xml");
要么
doc.LoadXml("something ");
然后找到它下面的节点,就像这样
XmlNode node = doc.DocumentElement.SelectSingleNode("/book/title");
要么
foreach(XmlNode node in doc.DocumentElement.ChildNodes){ string text = node.InnerText; //or loop through its children as well }
然后像这样读取该节点内的文本
string text = node.InnerText;
或读取属性
string attr = node.Attributes["theattributename"]?.InnerText
始终在Attributes ["something"]上检查null,因为如果该属性不存在,它将为null.
// Loading from a file, you can also load from a stream var xml = XDocument.Load(@"C:\contacts.xml"); // Query the data and write out a subset of contacts var query = from c in xml.Root.Descendants("contact") where (int)c.Attribute("id") < 4 select c.Element("firstName").Value + " " + c.Element("lastName").Value; foreach (string name in query) { Console.WriteLine("Contact's Full Name: {0}", name); }
参考:MSDN上的LINQ to XML
这是我为阅读xml站点地图而编写的应用程序:
using System; using System.Collections.Generic; using System.Windows.Forms; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Data; using System.Xml; namespace SiteMapReader { class Program { static void Main(string[] args) { Console.WriteLine("Please Enter the Location of the file"); // get the location we want to get the sitemaps from string dirLoc = Console.ReadLine(); // get all the sitemaps string[] sitemaps = Directory.GetFiles(dirLoc); StreamWriter sw = new StreamWriter(Application.StartupPath + @"\locs.txt", true); // loop through each file foreach (string sitemap in sitemaps) { try { // new xdoc instance XmlDocument xDoc = new XmlDocument(); //load up the xml from the location xDoc.Load(sitemap); // cycle through each child noed foreach (XmlNode node in xDoc.DocumentElement.ChildNodes) { // first node is the url ... have to go to nexted loc node foreach (XmlNode locNode in node) { // thereare a couple child nodes here so only take data from node named loc if (locNode.Name == "loc") { // get the content of the loc node string loc = locNode.InnerText; // write it to the console so you can see its working Console.WriteLine(loc + Environment.NewLine); // write it to the file sw.Write(loc + Environment.NewLine); } } } } catch { } } Console.WriteLine("All Done :-)"); Console.ReadLine(); } static void readSitemap() { } } }
粘贴盒上的代码 http://pastebin.com/yK7cSNeY
有很多方法,一些:
XmlSerializer的.使用具有您想要读取的目标模式的类 - 使用XmlSerializer将Xml中的数据加载到类的实例中.
Linq 2 xml
XmlTextReader的.
的XmlDocument
XPathDocument(只读访问)
你可以:
使用XmlSerializer类
使用XmlDocument类
示例在提供的msdn页面上
Linq to XML.
此外,VB.NET通过编译器提供比C#更好的xml解析支持.如果您有选择和愿望,请查看.
您可以使用DataSet读取XML字符串.
var xmlString = File.ReadAllText(FILE_PATH); var stringReader = new StringReader(xmlString); var dsSet = new DataSet(); dsSet.ReadXml(stringReader);
发布此信息以供参考.