Sự khác biệt giữa Linq với Hậu duệ và các phần tử XML là gì


181

Tôi đã bắt gặp cả hai từ khóa này trong VS IntelliSense. Tôi đã cố gắng tìm ra sự khác biệt giữa họ và không nhận được câu trả lời rõ ràng. Cái nào trong số này có hiệu suất tốt nhất với các tệp XML vừa và nhỏ. Cảm ơn

Câu trả lời:


292

Elementschỉ tìm thấy những yếu tố là con cháu trực tiếp , tức là trẻ em ngay lập tức.

Descendants tìm thấy trẻ em ở mọi cấp độ, ví dụ như trẻ em, cháu lớn, v.v ...


Dưới đây là một ví dụ chứng minh sự khác biệt:

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

Mã số:

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);
}

Kết quả:

Các yếu tố: Kiểm tra 1
Các yếu tố: Kiểm tra 3
Hậu duệ: Kiểm tra 1
Hậu duệ: Thử nghiệm 2
Hậu duệ: Kiểm tra 3

Nếu bạn biết rằng các yếu tố bạn muốn là trẻ em ngay lập tức thì bạn sẽ có hiệu suất tốt hơn nếu bạn sử dụng Elementsthay vì Descendants.


Câu trả lời tuyệt vời, tôi luôn nghĩ hai người hơi ngược như được tô đậm trong phần mô tả của bạn (khi mô tả các yếu tố, bạn luôn cần sử dụng từ "hậu duệ" trong đó vì nó có nhiều tùy chọn hơn khi nói về Hậu duệ
Mattitorada

16

Descendantssẽ tìm kiếm toàn bộ cây con của phần tử hiện tại cho tên được chỉ định (hoặc sẽ trả về một phiên bản dẹt của cây nếu không có tên nào được cung cấp), trong khi Elementschỉ tìm kiếm các phần tử con của phần tử hiện tại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.