Linq와 XML 후손 및 요소의 차이점


181

VS IntelliSense 에서이 키워드를 모두 보았습니다. 나는 그들 사이의 차이점을 찾으려고 노력했지만 명확한 대답을 얻지 못했습니다. 중소 규모 XML 파일에서 가장 우수한 성능을 발휘하는 것은 무엇입니까? 감사

답변:


292

Elements직계 자손 즉 직계 자녀 인 요소 만 찾습니다 .

Descendants 어린이, 손자 등 모든 수준의 어린이를 찾습니다.


차이점을 보여주는 예는 다음과 같습니다.

<?xml version="1.0" encoding="utf-8" ?>
<foo>
    <bar>Test 1</bar>
    <baz>
        <bar>Test 2</bar>
    </baz>
    <bar>Test 3</bar>
</foo>

암호:

XDocument doc = XDocument.Load("input.xml");
XElement root = doc.Root;

foreach (XElement e in root.Elements("bar"))
{
    Console.WriteLine("Elements : " + e.Value);
}

foreach (XElement e in root.Descendants("bar"))
{
    Console.WriteLine("Descendants : " + e.Value);
}

결과:

구성 요소 : 시험 1
요소 : 시험 3
후손 : 시험 1
후손 : 시험 2
후손 : 시험 3

원하는 요소가 직계 자식임을 알고 있다면 Elements대신 대신 사용하면 성능이 향상됩니다 Descendants.


좋은 대답, 나는 항상 두 개가 설명에서 강조된 것처럼 약간 뒤로 향한다고 생각했습니다. (요소를 설명 할 때, 자손에 대해 이야기 할 때 조금 더 선택적인 단어 인 "자손"이라는 단어를 사용해야합니다.
Mattisdada

16

Descendants지정된 이름에 대해 현재 요소의 전체 하위 트리를 검색하거나 이름이 제공되지 않으면 평평한 트리 버전을 반환하지만 Elements현재 요소의 직계 자식 만 검색합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.