Câu trả lời:
Elements
chỉ 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 Elements
thay vì Descendants
.
Descendants
sẽ 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 Elements
chỉ tìm kiếm các phần tử con của phần tử hiện tại.