当前位置:  开发笔记 > 编程语言 > 正文

如何在C#中读取和解析XML文件?

如何解决《如何在C#中读取和解析XML文件?》经验,为你挑选了7个好方法。

如何在C#中读取和解析XML文件?



1> Wolf5..:

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.


在我开始使用LINQ之前,我写过这个.LINQ很好,可以更容易阅读.我这些天大部分时间都在使用LINQ.但是有些组件确实需要旧式XML对象,因此它仍然会被使用.我建议尝试这里的"旧式"和LINQ,看看适合你的是什么.
虽然你说它"更好"但是在LINQ上这样做有什么其他的缺点吗?就个人而言,我发现这种方法最简单,至少对我的需求而言.

2> Konstantin T..:

LINQ to XML示例:

// 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


XDocument.Parse( "东西"); 一个字符串.

3> ajzeffer..:

这是我为阅读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



4> eglasius..:

有很多方法,一些:

XmlSerializer的.使用具有您想要读取的目标模式的类 - 使用XmlSerializer将Xml中的数据加载到类的实例中.

Linq 2 xml

XmlTextReader的.

的XmlDocument

XPathDocument(只读访问)


实际上,XmlReader.Create而不是直接使用XmlTextReader,因为.NET 2.0.

5> Grzenio..:

你可以:

使用XmlSerializer类

使用XmlDocument类

示例在提供的msdn页面上



6> 小智..:

Linq to XML.

此外,VB.NET通过编译器提供比C#更好的xml解析支持.如果您有选择和愿望,请查看.



7> 小智..:

您可以使用DataSet读取XML字符串.

var xmlString = File.ReadAllText(FILE_PATH);
var stringReader = new StringReader(xmlString);
var dsSet = new DataSet();
dsSet.ReadXml(stringReader);

发布此信息以供参考.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有