[c#] XML 파일을 어떻게 파싱합니까?


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 . 그리고 나는 이것을 할 수있는 가장 좋은 방법이 없다고 생각합니다. 당신은 항상 당신 자신에게 그것을 선택할 필요가 있습니다. 무엇이 당신에게 가장 적합한 지요.

Question

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




나는 최근에 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 파일의 모든 요소와 특성을 전혀 구문 분석 할 수있었습니다.




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




"XML 구문 분석을위한 모범 사례"가 있는지 확실하지 않습니다. 다양한 상황에 적합한 수많은 기술이 있습니다. 사용하는 방법은 구체적인 시나리오에 따라 다릅니다.

LINQ to XML , XmlReader , XPathNavigator 또는 정규식으로 이동할 수 있습니다. 당신이 당신의 필요를 정교하게한다면, 나는 몇 가지 제안을하려고 노력할 수 있습니다.




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

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

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




이 라이브러리 System.Xml.Linq 사용하여 XML을 구문 분석 할 수 있습니다. 아래는 XML 파일을 구문 분석하는 데 사용한 샘플 코드입니다.

public CatSubCatList GenerateCategoryListFromProductFeedXML()
{
    string path = System.Web.HttpContext.Current.Server.MapPath(_xmlFilePath);

    XDocument xDoc = XDocument.Load(path);

    XElement xElement = XElement.Parse(xDoc.ToString());


    List<Category> lstCategory = xElement.Elements("Product").Select(d => new Category
    {
        Code = Convert.ToString(d.Element("CategoryCode").Value),
        CategoryPath = d.Element("CategoryPath").Value,
        Name = GetCateOrSubCategory(d.Element("CategoryPath").Value, 0), // Category
        SubCategoryName = GetCateOrSubCategory(d.Element("CategoryPath").Value, 1) // Sub Category
    }).GroupBy(x => new { x.Code, x.SubCategoryName }).Select(x => x.First()).ToList();

    CatSubCatList catSubCatList = GetFinalCategoryListFromXML(lstCategory);

    return catSubCatList;
}





Links



Tags

c# c#   xml