c# 예제 특정 - XML 파일을 어떻게 파싱합니까?





6 Answers

매우 간단합니다. 나는 이것이 표준 방법이라는 것을 알고 있지만, 훨씬 더 잘 처리 할 수있는 자신의 라이브러리를 만들 수 있습니다.

여기 예시들이 있습니다 :

XmlDocument xmlDoc= new XmlDocument(); // Create an XML document object
xmlDoc.Load("yourXMLFile.xml"); // Load the XML document from the specified file

// Get elements
XmlNodeList girlAddress = xmlDoc.GetElementsByTagName("gAddress");
XmlNodeList girlAge = xmlDoc.GetElementsByTagName("gAge"); 
XmlNodeList girlCellPhoneNumber = xmlDoc.GetElementsByTagName("gPhone");

// Display the results
Console.WriteLine("Address: " + girlAddress[0].InnerText);
Console.WriteLine("Age: " + girlAge[0].InnerText);
Console.WriteLine("Phone Number: " + girlCellPhoneNumber[0].InnerText);

또한 함께 작업 할 수있는 다른 방법 이 있습니다. 예를 들어, here . 그리고 나는 이것을 할 수있는 가장 좋은 방법이 없다고 생각합니다. 당신은 항상 당신 자신에게 그것을 선택할 필요가 있습니다. 무엇이 당신에게 가장 적합한 지요.

노드 수정 read

C #에서 XML 파일을 파싱하는 간단한 방법이 있습니까? 그렇다면, 무엇?




많은 양의 데이터 (수 메가 바이트)를 처리하는 경우 XmlReader 를 사용하여 XML 구문 분석을 스트리밍하려고합니다.

다른 모든 것들 ( XPathNavigator , XElement , XmlDocument , 심지어 생성 된 객체 그래프를 모두 유지한다면 XmlSerializer )은 메모리 사용량이 높아지고 로드 시간이 매우 느려집니다.

물론 메모리의 모든 데이터가 필요하다면 선택의 여지가 없을 수도 있습니다.




.NET 2.0을 사용하는 경우 XmlReader 및 하위 클래스 XmlTextReaderXmlValidatingReader 사용해보십시오. XML 파일을 빠르고, 가볍게 (메모리 사용 등), 전달 전용으로 제공합니다.

XPath 기능이 필요한 경우 XPathNavigator 사용해보십시오. 메모리에 전체 문서가 필요한 경우 XmlDocument 사용해보십시오.




나는 최근에 XML 문서의 구문 분석과 관련된 응용 프로그램에서 작업해야하며 Jon Galloway와 LINQ to XML을 기반으로 한 접근 방식이 가장 좋습니다. 그렇지만 유용한 예제를 찾기 위해 조금씩 파헤쳐 야했습니다.

이 코드가 제대로 작동하지만 환영받지 못하는 의견이 있으면이 프로젝트의 XML 구문 분석에 대해 자세히 알고 싶습니다.

public void ParseXML(string filePath)  
{  
    // create document instance using XML file path
    XDocument doc = XDocument.Load(filePath);

    // get the namespace to that within of the XML (xmlns="...")
    XElement root = doc.Root;
    XNamespace ns = root.GetDefaultNamespace();

    // obtain a list of elements with specific tag
    IEnumerable<XElement> elements = from c in doc.Descendants(ns + "exampleTagName") select c;

    // obtain a single element with specific tag (first instance), useful if only expecting one instance of the tag in the target doc
    XElement element = (from c in doc.Descendants(ns + "exampleTagName" select c).First();

    // obtain an element from within an element, same as from doc
    XElement embeddedElement = (from c in element.Descendants(ns + "exampleEmbeddedTagName" select c).First();

    // obtain an attribute from an element
    XAttribute attribute = element.Attribute("exampleAttributeName");
}

이러한 함수를 사용하여 XML 파일의 모든 요소와 특성을 전혀 구문 분석 할 수있었습니다.




또한 XPath 선택기를 다음과 같은 방법으로 사용할 수 있습니다 (특정 노드를 쉽게 선택할 수 있음).

XmlDocument doc = new XmlDocument();
doc.Load("test.xml");

var found = doc.DocumentElement.SelectNodes("//book[@title='Barry Poter']"); // select all Book elements in whole dom, with attribute title with value 'Barry Poter'

// Retrieve your data here or change XML here:
foreach (XmlNode book in nodeList)
{
  book.InnerText="The story began as it was...";
}

Console.WriteLine("Display XML:");
doc.Save(Console.Out);

문서




XmlDocument를 사용하여 Linq에서 XML 클래스로 변환 할 수있는 특성에서 데이터를 조작하거나 검색 할 수 있습니다.




Related


Tags

c#   xml