XDocument 또는 XmlDocument
나는 지금 배우고 XmlDocument있지만 방금 뛰어 들었고 XDocument그 차이점이나 이점을 검색하려고 할 때 유용한 것을 찾을 수 없습니다. 왜 다른 것을 사용하는지 말해 줄 수 있습니까?
당신이 .NET 버전 3.0을 사용하거나 낮은 경우, 당신 이 사용하는 XmlDocument고전적인 DOM의 API 일명. 마찬가지로이를 기대할 수있는 다른 API가 있습니다.
그러나 선택을한다면 XDocument일명 LINQ to XML을 사용하는 것이 좋습니다 . 그것은의 많은 문서를 생성하고 처리하는 것이 더 간단. 예를 들어 다음과 같은 차이점이 있습니다.
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("root");
root.SetAttribute("name", "value");
XmlElement child = doc.CreateElement("child");
child.InnerText = "text node";
root.AppendChild(child);
doc.AppendChild(root);
과
XDocument doc = new XDocument(
    new XElement("root",
                 new XAttribute("name", "value"),
                 new XElement("child", "text node")));
네임 스페이스는 내가 본 다른 XML API와 달리 LINQ to XML에서 작업하기가 매우 쉽습니다.
XNamespace ns = "http://somewhere.com";
XElement element = new XElement(ns + "elementName");
// etc
LINQ to XML은 LINQ 와도 잘 작동합니다. 구성 모델을 사용하면 하위 요소 시퀀스를 사용하여 요소를 실제로 쉽게 작성할 수 있습니다.
// Customers is a List<Customer>
XElement customersElement = new XElement("customers",
    customers.Select(c => new XElement("customer",
        new XAttribute("name", c.Name),
        new XAttribute("lastSeen", c.LastOrder)
        new XElement("address",
            new XAttribute("town", c.Town),
            new XAttribute("firstline", c.Address1),
            // etc
    ));
일반적인 LINQ 스타일에 맞는 훨씬 더 선언적입니다.
Brannon이 언급했듯이, 이들은 스트리밍 API가 아닌 인 메모리 API입니다 ( XStreamingElement게으른 출력을 지원 하지만 ). XmlReader및 XmlWriter.NET에서 XML 스트리밍의 정상적인 방법이 있습니다,하지만 당신은 어느 정도 모든 API를 혼합 할 수 있습니다. 예를 들어, 큰 문서를 스트리밍 할 수 있지만 XmlReader요소의 시작 부분 에 위치 를 지정하고 요소를 읽고 XElement처리 한 후 다음 요소로 이동 하여 LINQ to XML을 사용할 수 있습니다 .이 기술에 대한 다양한 블로그 게시물이 있습니다. 빠른 검색으로 찾은 것이 있습니다.
나는 대답 놀랄 것도 지금까지 사실을 언급하지 오전 XmlDocument에는 줄 정보를 제공하지 않습니다를 하면서, XDocument하지 (관통 IXmlLineInfo인터페이스).
이것은 (당신이 보고서의 오류를 원하는 경우 XML 예를 들어, 또는 요소가 일반적으로 정의되는 위치 추적) 어떤 경우에는 중요한 기능이 될 당신이 행복하게 사용하여 구현하려면 시작하기 전에 당신은 더 나은이 인식 할 수 있습니다 XmlDocument나중에, 모든 것을 바꿔야한다는 것을 발견하십시오.
XmlDocumentXML DOM 객체 모델에 익숙한 개발자에게 좋습니다. 오래 전부터 사용되었으며 W3C 표준에 어느 정도 해당합니다. 수동 탐색 및 XPath노드 선택을 지원합니다 .
XDocument.NET 3.5의 LINQ to XML 기능을 강화합니다. IEnumerable<>C # 을 많이 사용 하고 작업하기가 더 쉽습니다.
두 문서 모델 모두 XmlReader예를 들어 , 전체 문서를 메모리에로드해야합니다 .
XDocumentLINQ to XML API이며 XML 용 XmlDocument표준 DOM 스타일 API입니다. DOM을 잘 알고 있고 LINQ to XML을 배우고 싶지 않다면로 이동하십시오 XmlDocument. 둘 다 처음 사용하는 경우이 두 페이지 를 비교 한이 페이지 를 확인하고 더 좋아 보이는 페이지 를 선택하십시오.
방금 LINQ to XML을 사용하기 시작했으며 기능 구성을 사용하여 XML 문서를 만드는 방식이 마음에 듭니다. 정말 좋습니다. DOM은 비교가 어렵다.
다른 곳에서 언급했듯이, Linq to Xml은 XML 문서를 작성 및 변경하는 것과 비교할 때 바람이 불고 XmlDocument, XNamespace ns + "elementName"구문은 네임 스페이스를 다룰 때 즐거운 독서를 만듭니다.
언급 xsl하고 언급하기 xpath어려운 점은 xpath 1.0Linq 2 Xml에서 다음 XNodes을 포함하여 임의의 표현식 을 계속 실행할 수 있다는 것입니다 .
using System.Xml.XPath;
xpath다음 확장 방법 을 통해 데이터를 탐색하고 투영 할 수 있습니다 .
- XPathSelectElement- 단일 요소
- XPathSelectElements- 노드 세트
- XPathEvaluate- 스칼라 및 기타
예를 들어 Xml 문서가 주어진 경우 :
<xml>
    <foo>
        <baz id="1">10</baz>
        <bar id="2" special="1">baa baa</bar>
        <baz id="3">20</baz>
        <bar id="4" />
        <bar id="5" />
    </foo>
    <foo id="123">Text 1<moo />Text 2
    </foo>
</xml>
우리는 평가할 수 있습니다 :
var node = xele.XPathSelectElement("/xml/foo[@id='123']");
var nodes = xele.XPathSelectElements(
"//moo/ancestor::xml/descendant::baz[@id='1']/following-sibling::bar[not(@special='1')]");
var sum = xele.XPathEvaluate("sum(//foo[not(moo)]/baz)");
또한 XDocumentXbox 360 및 Windows Phone OS 7.0에서도 지원됩니다. 목표로 삼으려면에서 개발 XDocument하거나 마이그레이션하십시오 XmlDocument.
나는 그것이 XDocument훨씬 더 많은 객체 생성 호출을 한다고 믿습니다 . 많은 XML 문서를 처리 할 때 XMLDocument더 빠를 것이라고 생각합니다.
이런 일이 발생하는 곳은 스캔 데이터를 관리하는 것입니다. 많은 스캔 도구가 명백한 이유로 데이터를 XML로 출력합니다. 이러한 스캔 파일을 많이 처리해야한다면 성능이 향상 될 것입니다 XMLDocument.
참고 URL : https://stackoverflow.com/questions/1542073/xdocument-or-xmldocument
'Programming' 카테고리의 다른 글
| jQuery에서 여러 CSS 속성을 정의하는 방법은 무엇입니까? (0) | 2020.02.13 | 
|---|---|
| jQuery에서 확인란 값 가져 오기 (0) | 2020.02.13 | 
| IIS7에서 '클래식'과 '통합'파이프 라인 모드의 차이점은 무엇입니까? (0) | 2020.02.13 | 
| Visual Studio에서“stdafx.h”는 무엇입니까? (0) | 2020.02.13 | 
| 람다 식에서 속성 이름 검색 (0) | 2020.02.13 |