[C#] XML 파일을 어떻게 구문 분석합니까? [닫은]

C #에서 XML 파일을 구문 분석하는 간단한 방법이 있습니까? 그렇다면 무엇입니까?



답변

내가 사용하는 거라고 XML에 LINQ를 사용하면 .NET 3.5 이상에 있다면.


답변

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

여기 몇 가지 예가 있어요.

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 입니다. 그리고이 작업을 수행하는 가장 좋은 방법은 없다고 생각합니다. 항상 스스로 선택해야합니다. 가장 적합한 것입니다.


답변

올바른 XSD 스키마 를 사용하여 xsd.exe 로 클래스 세트를 작성 하고를 사용 XmlSerializer하여 XML에서 오브젝트 트리를 작성하고 그 반대의 경우도 가능합니다. 모델에 대한 제한이 거의없는 경우 Xml * Attributes를 사용하여 모델 클래스와 XML간에 직접 매핑을 만들 수도 있습니다.

XML 직렬화에 대한 소개 기사 MSDN에가.

성능 팁 : 제작 XmlSerializer비용이 많이 듭니다. XmlSerializer여러 XML 파일을 구문 분석 / 작성하려는 경우 인스턴스에 대한 참조를 유지하십시오 .


답변

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

(다른 건 XPathNavigator, XElement, XmlDocument도 및 XmlSerializer당신이 전체 생성 된 개체 그래프를 유지하는 경우)가 발생합니다 메모리 사용 도 매우 느린로드 시간을합니다.

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


답변

사용 XmlTextReader, XmlReader, XmlNodeReaderSystem.Xml.XPath네임 스페이스. 그리고 ( XPathNavigator, XPathDocument, XPathExpression, XPathnodeIterator).

일반적 XPath으로 XML을보다 쉽게 ​​읽을 수 있습니다.


답변

나는 최근에 XML 문서의 구문 분석과 관련된 응용 프로그램을 작성해야했으며 LINQ to XML 기반 접근 방식이 최고라고 Jon Galloway에 동의합니다. 그러나 유용한 예제를 찾기 위해 조금 파야 했으므로 더 이상 고민하지 않고 여기에 몇 가지가 있습니다!

이 코드가 작동함에 따라 모든 의견을 환영하지만 완벽하지 않을 수 있으며이 프로젝트의 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 파일의 모든 요소와 속성을 전혀 문제없이 구문 분석 할 수있었습니다!


답변

당신이 .NET 2.0을 사용하는 경우, 시도 XmlReader와 그 서브 클래스 XmlTextReader, 및 XmlValidatingReader. XML 파일을 구문 분석 할 수있는 빠르고 가벼운 (메모리 사용 등) 전진 방식을 제공합니다.

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