[C#] C #에서 XML 파일을 읽고 구문 분석하는 방법

C #에서 XML 파일을 읽고 구문 분석하는 방법



답변

문자열 또는 파일에서 XML을 읽는 XmlDocument

XmlDocument doc = new XmlDocument();
doc.Load("c:\\temp.xml");

또는

doc.LoadXml("<xml>something</xml>");

그런 다음 아래에서 노드를 찾으십시오.

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


답변

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 (읽기 전용 액세스)

답변

다음 중 하나를 수행 할 수 있습니다.

제공된 msdn 페이지에 예제가 있습니다.


답변

Linq에서 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);

정보를 위해 이것을 게시합니다.