问题
I have the following xml schema.
<Rooms>
<Room RoomNumber="room1" EMAIL="ssds@dsfd.com" dsfdd=""/>
<Room RoomNumber="room2" EMAIL="ssds@sdd.com" dsfdd=""/>
</Rooms>
I have to return Email address based on the input(input to program is room number).
How i can achieve this using LINQ to XML?
回答1:
var doc = XDocument.Load(myXmlFilePath);
// or doc = XDocument.Parse(myXmlString);
string roomNumber = "room1";
var emailQuery = from room in doc.Root.Elements("Room")
where (string)room.Attribute("RoomNumber") == roomNumber
select (string)room.Attribute("EMAIL");
Then, with a query like that you can get results:
// if there is always only one <Room> with given roomNumber
var email = emailQuery.First();
// otherwise
var emails = emailQuery.ToList();
回答2:
Try this:
var xml = XElement.Parse("<Rooms>"+
"<Room RoomNumber=\"room1\" EMAIL=\"ssds@dsfd.com\" dsfdd=\"\"/>"+
"<Room RoomNumber=\"room2\" EMAIL=\"ssds@sdd.com\" dsfdd=\"\"/>"+
"</Rooms>");
string room = "room1"; //input
var email = xml.Elements("Room")
.Where(c => c.Attribute("RoomNumber").Value == room)
.Select(c => c.Attribute("EMAIL").Value).FirstOrDefault();
来源:https://stackoverflow.com/questions/15267530/how-to-get-the-attribute-value-of-xml-using-linq-to-xml