Hi I have been working on this for two days and I don't know why it doesn't work. I have the following XML
Data = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XComment("UserData"),
new XElement("Users",
new XElement("user",
new XAttribute("name", "Bugs Bunny"),
new XAttribute("userID", "bbunny"),
new XAttribute("usertype", "Customer"),
new XElement("account",
new XAttribute("accounttype", "checking"),
new XAttribute("actbal", 1000),
new XAttribute("actbaldate", "1/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "1/1/2013"),
new XAttribute("tranAmount", 1000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 1000)))),
new XElement("user",
new XAttribute("name", "Tasmanian Devil"),
new XAttribute("userID", "tdevil"),
new XAttribute("usertype", "Customer"),
new XElement("account",
new XAttribute("accounttype", "checking"),
new XAttribute("actbal", -20),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "1/1/2013"),
new XAttribute("tranAmount", 1000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 1000)),
new XElement("trans",
new XAttribute("tranDate", "2/1/2012"),
new XAttribute("tranAmount", 900),
new XAttribute("trantype", "withdrawal"),
new XAttribute("tranBalance", 100)),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 120),
new XAttribute("trantype", "withdrawal"),
new XAttribute("tranBalance", -20)))),
new XElement("user",
new XAttribute("name", "Sam Sheepdog"),
new XAttribute("userID", "ssheepdog"),
new XAttribute("usertype", "Customer"),
new XElement("account",
new XAttribute("accounttype", "checking"),
new XAttribute("actbal", 1000),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "1/1/2013"),
new XAttribute("tranAmount", 1000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 1000)),
new XElement("trans",
new XAttribute("tranDate", "2/1/2012"),
new XAttribute("tranAmount", 500),
new XAttribute("trantype", "transfer"),
new XAttribute("tranBalance", 500)),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 500),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 1000))),
new XElement("account",
new XAttribute("accounttype", "savings"),
new XAttribute("actbal", 500),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 500),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 500)))),
new XElement("user",
new XAttribute("name", "Elmer J. Fudd"),
new XAttribute("userID", "efudd"),
new XAttribute("usertype", "Customer"),
new XElement("account",
new XAttribute("accounttype", "checking"),
new XAttribute("actbal", 100000),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "1/1/2013"),
new XAttribute("tranAmount", 100000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 100000)),
new XElement("trans",
new XAttribute("tranDate", "2/1/2012"),
new XAttribute("tranAmount", 50000),
new XAttribute("trantype", "transfer"),
new XAttribute("tranBalance", 50000)),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 50000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 100000))),
new XElement("account",
new XAttribute("accounttype", "moneymarket"),
new XAttribute("actbal", 50000),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 50000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 50000)))),
new XElement("user",
new XAttribute("name", "Ralph Wolf"),
new XAttribute("userID", "rwolf"),
new XAttribute("usertype", "Customer"),
new XElement("account",
new XAttribute("accounttype", "checking"),
new XAttribute("actbal", 200),
new XAttribute("actbaldate", "4/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "1/1/2013"),
new XAttribute("tranAmount", 100),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 100)),
new XElement("trans",
new XAttribute("tranDate", "4/1/2012"),
new XAttribute("tranAmount", 100),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 100))),
new XElement("account",
new XAttribute("accounttype", "savings"),
new XAttribute("actbal", 1000),
new XAttribute("actbaldate", "4/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "3/1/2013"),
new XAttribute("tranAmount", 400),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 400)),
new XElement("trans",
new XAttribute("tranDate", "4/1/2012"),
new XAttribute("tranAmount", 600),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 1000))),
new XElement("account",
new XAttribute("accounttype", "moneymarket"),
new XAttribute("actbal", 500),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 500),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 500)))),
));
I don't understand why this won't give me a list of trans for a provided userID == efudd and accounttype = checking. When I call foreach it startsto iterate over the items, But then it just stops and there is nothing found.
IEnumerable<Transaction> userAcctInfo =
from item in Data.Descendants("user")
where (string)item.Attribute("usertype") == "Customer" &&
(string)item.Attribute("userID") == userID
from accts in item.Descendants("account")
where (string)accts.Attribute("accounttype") == account
from trans in item.Descendants("user").Descendants("account").Descendants("trans")
select new Transaction((DateTime)trans.Attribute("tranDate"),
(string)trans.Attribute("trantype"),
(decimal)trans.Attribute("tranAmount"),
(decimal)trans.Attribute("transBalance"));
What am I doing wrong? I have looked at several examples here and i just don't understand.
thanks
Root
property call (or Element("Users")
) at the beginning of the query. Elements
instead of Descendants
when you know where exactly the element is in tree structure. trans
from the item
instead of accts
, which is already defined there? That one works and returns 3 items
var userAcctInfo =
from item in Data.Root.Elements("user")
where (string)item.Attribute("usertype") == "Customer" &&
(string)item.Attribute("userID") == userId
from accts in item.Elements("account")
where (string)accts.Attribute("accounttype") == account
from trans in accts.Elements("trans")
select new Transaction((DateTime)trans.Attribute("tranDate"),
(string)trans.Attribute("trantype"),
(decimal)trans.Attribute("tranAmount"),
(decimal)trans.Attribute("tranBalance"));
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.