我在Visual Studio 2015 C#.net中遇到LINQ to XML查询问题。我正在编写一个控制台应用程序。本着透明的精神,我是上述所有人的新手,所以我可能会有一个需要指出的简单错误。我花了几个小时阅读例子来实现这一目标。
XML数据集:
<inv-balance>
<item ccard-charge-percent="3.8" color-code="51" description="g200 BLACK XL" gtin="00821780001021" price="$2.83" size-code="6" special-expiry="04/23/17" special-price="$1.97" style-code="g200">
<whse code="CC">69666</whse>
<whse code="KC">30613</whse>
<whse code="GD">63661</whse>
<whse code="PH">98920</whse>
<whse code="TD">54505</whse>
<whse code="FO">36127</whse>
<whse code="MA">88852</whse>
<whse code="CD">19212</whse>
<whse code="CN">62769</whse>
<whse code="WA">15232</whse>
<whse code="D4">0</whse>
<whse code="DB">0</whse>
<whse code="DD">0</whse>
<whse code="DL">0</whse>
<whse code="DR">0</whse>
<whse code="DU">0</whse>
<whse code="DP">0</whse>
<whse code="D2">0</whse>
<whse code="DT">0</whse>
<whse code="DK">0</whse>
<whse code="DO">0</whse>
<whse code="NC">0</whse>
<whse code="DZ">0</whse>
<whse code="DS">0</whse>
<whse code="DI">0</whse>
<whse code="DQ">0</whse>
<whse code="D1">0</whse>
<whse code="DE">0</whse>
<whse code="DV">0</whse>
<whse code="DN">0</whse>
<whse code="D8">0</whse>
</item>
</inv-balance>
我的代码:
XDocument rawxml = XDocument.Load(url);
var things = from r in rawxml.Descendants("inv-balance")
select new
{
price = r.Element("item").Attribute("price"),
saleprice = (string)r.Element("item").Attribute("special-price") ?? "none",
expdate = (string)r.Element("item").Attribute("special-expiry") ?? "none"
};
var inv = (from whinv in rawxml.Descendants("item")
select new
{
whse = whinv.Element("whse").Attribute("code").Value,
qty = whinv.Element("whse").Value
}).ToList();
foreach (var r in things)
{
Console.WriteLine("Regular Price: " + r.price);
if (r.saleprice != "none")
Console.WriteLine("Sale Price: " + r.saleprice + " On sale through " + r.expdate);
Console.WriteLine("Inventory Available:");
foreach (var whinv in inv)
{
Console.WriteLine("Location: " + whinv.whse + " | " + whinv.qty);
}
}
此图像是结果
我想要做的是从所有仓库中检索库存....最好是CC,KC,GD,PH,TD,FO,MA,CD,CN,WA,其他人永远不会有库存。
现在它只拉动第一个仓库代码。我尝试过没有骰子的attribue过滤。 XML没有格式错误,我在这里的粘贴由于某种原因很奇怪......它应该是whse code =&#34; xx&#34;。
我很欣赏有关我做错的任何建议。我最终的目标是将其写入数据库,但现在我可以逐步显示数据。
答案 0 :(得分:0)
var codes = new List<string> { "CC", "KC", "GD", "PH", "TD", "FO", "MA", "CD", "CN", "WA" };
var inv = (from whinv in rawxml.Descendants("item").Elements("whse")
where codes.Contains(whinv.Attribute("code").Value)
select new
{
whse = whinv.Attribute("code").Value,
qty = whinv.Value
}).ToList();