Vâng, các thành phần Người dùng không có thuộc tính GUID. Hai tùy chọn gợi ý:
- Nhìn vào
XDocument.Root.Elements("User")
- Sử dụng
Descendants("User")
để tìm tất cả yếu tố tài.
Tôi sẽ kết hợp trước đây cho thời điểm này. Điều đó cho chúng tôi:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (string) el.Attribute("GUID") == userGUID.ToString()
select el);
Bây giờ, chúng tôi vẫn có thể dọn dẹp thêm. Trước hết, chúng ta hãy đúc để Guid
thay vì string
:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (Guid) el.Attribute("GUID") == userGUID
select el);
Tuy nhiên có không có nhiều lý do để sử dụng một biểu thức truy vấn ở đây ... tất cả các bạn đang áp dụng là một vị duy nhất. Hãy chỉ sử dụng Where
phương pháp trực tiếp:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid) el.Attribute("GUID") == userGUID);
Làm thế nào bạn đẻ nó ra là tùy thuộc vào bạn, tất nhiên :) Với một đường dài, có lẽ bạn có thể sắp xếp mọi thứ dưới một dòng đầu tiên dài hơn:
IEnumerable<XElement> users = XMLDoc.Root
. etc
Bây giờ, cuối cùng - điều gì xảy ra nếu phần tử User không có thuộc tính GUID? Hiện tại, mã này sẽ ném một ngoại lệ. Đó có thể là chính xác những gì bạn muốn - hoặc nó có thể không. Nếu không, bạn có thể làm cho nó bỏ qua những điều đó bằng cách đúc để Nullable<Guid>
aka Guid?
thay vì:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid?) el.Attribute("GUID") == userGUID);
Nguồn
2010-04-20 20:21:58
Cảm ơn, đây là một phần những gì tôi cần, một sai lầm ngu ngốc từ tôi. – Nacho
Như Jon chỉ ra bên dưới, việc truyền đến đúng loại là lựa chọn tốt hơn. Ngoài ra, nếu bạn sử dụng "el.Attribute (" GUID ") .Giá trị" bạn sẽ tự động nhận được một chuỗi như là loại trả về và không có nhu cầu cho các diễn viên. –
'root' phải là' Gốc' trong 'XMLDoc.root.Elements (" Người dùng ")'. – Appulus