programing

XDocument 또는 XmlDocument

codeshow 2023. 10. 19. 22:52
반응형

XDocument 또는 XmlDocument

저는 지금 배우고 있는데 방금 우연히 발견했는데 다른 점이나 장점을 검색해보니 유용한 것이 없는데, 왜 다른 것을 사용하시는지 말씀해주시겠어요?

사용하시는 분들은.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에서 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에서 XML을 스트리밍하는 일반적인 방법입니다.NET, 하지만 모든 API를 어느 정도 섞을 수 있습니다.예를 들어, 큰 문서를 스트리밍할 수 있지만 위치를 지정하여 XML로 LINQ를 사용할 수 있습니다.XmlReader어떤 요소의 시작에서, a를 읽습니다.XElement그것으로부터 그것을 처리하고, 다음 요소로 넘어갑니다.이 기법에 대한 블로그 게시물이 다양한데, 빠른 검색으로 찾은 것이 있습니다.

저는 지금까지 어떤 답변도 (인터페이스를 통해) 회선 정보를 제공하지 않는다는 사실을 언급하지 않았다는 것이 놀랍습니다.

이것은 어떤 경우에 중요한 기능이 될 수 있으며(예를 들어 XML에서 오류를 보고하거나 일반적으로 요소가 정의된 위치를 추적하려면), 다음을 사용하여 구현을 시작하기 전에 이 사실을 알아야 합니다.XmlDocument, 나중에 발견하려면 모든 것을 바꿔야 합니다.

XmlDocumentXML DOM 객체 모델에 익숙한 개발자에게 좋습니다.그것은 꽤 오래된 것이고, 어느 정도는 W3C 표준에 해당합니다.수동 내비게이션은 물론XPath노드 선택.

XDocument에서 LINQ to XML 기능의 전원을 공급합니다.NET 3.5.많이 사용합니다.IEnumerable<>직선 C# 안에서 더 쉽게 작업할 수 있습니다.

두 문서 모델 모두 전체 문서를 메모리에 로드해야 합니다(다른 경우와 달리).XmlReader예를 들어).

다른 곳에서 언급된 바와 같이, 의심할 여지 없이, Linq to Xml은 다음과 비교하여 xml 문서의 생성과 변경을 쉽게 만듭니다.XmlDocument, .XNamespace ns + "elementName"구문은 네임스페이스를 다룰 때 즐거운 읽기를 가능하게 합니다.

한 가지 언급할 가치가 있습니다.xsl그리고.xpath다이는 여전히 임의적인 실행이 가능하다는 것을 주목하기 어렵습니다.xpath 1.0 2 Linq 2 Xml 의 식XNodes다음을 포함하여:

using System.Xml.XPath;

그리고 나서 우리는 데이터를 탐색하고 프로젝트할 수 있습니다.xpath다음과 같은 확장 방법을 사용합니다.

예를 들어, 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)");

XDocument는 LINQ에서 XML API됩니다에서 제공됩니다.XmlDocument는 XML을 위한 표준 DOM 스타일 API입니다. 만약 당신이 DOM을 잘 알고 있고, XML에 LINQ를 배우고 싶지 않다면 다음과 같이 하십시오.XmlDocument. 둘 다 처음인 경우, 둘을 비교하는 이 페이지를 확인하고, 어느 쪽이 더 좋아 보이는지 선택합니다.

저는 이제 막 XML에 LINQ를 사용하기 시작했는데, 기능적인 구성을 사용하여 XML 문서를 작성하는 방식이 마음에 듭니다.정말 좋군요.비교하면 DOM이 투박합니다.

그리고 참고하세요.XDocument는 및 는 Xbox 360및 Windows Phone OS 7.0됩니다.그들을 목표로 한다면, 개발은XDocument또는 에서 마이그레이션합니다.XmlDocument.

나는 그렇게 믿어요.XDocument훨씬 더 많은 개체 생성 호출을 수행합니다. 문서가 필요하지 않을까 생각합니다XMLDocument더 빠를 겁니다.

검색 데이터를 관리하는 일은 이런 일이 한 가지 있습니다.많은 스캔 도구는 분명한 이유로 데이터를 XML로 출력합니다.이 스캔 파일들을 많이 처리해야 한다면 더 좋은 성능을 발휘할 수 있을 것 같습니다.XMLDocument.

언급URL : https://stackoverflow.com/questions/1542073/xdocument-or-xmldocument

반응형