C# 如何使用条件从不同元素获取所有属性
嗨,我想通过使用XDocument从上面的XML中获取特定值。我想从不同的商店获得所有的货币价值,这些价值具有相同的日期。我只能从单个商店(ShopA)获得日价值和货币价值C# 如何使用条件从不同元素获取所有属性,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,嗨,我想通过使用XDocument从上面的XML中获取特定值。我想从不同的商店获得所有的货币价值,这些价值具有相同的日期。我只能从单个商店(ShopA)获得日价值和货币价值 XDocument doc=XDocument.Load(xmlFileName.xml); 变量areaName=doc.Root.Elements(“区域”); IEnumerator s=areaName.Elements(“ShopA”).GetEnumerator(); 而(s.MoveNext()) { var
XDocument doc=XDocument.Load(xmlFileName.xml);
变量areaName=doc.Root.Elements(“区域”);
IEnumerator s=areaName.Elements(“ShopA”).GetEnumerator();
而(s.MoveNext())
{
var day=s.Current.属性(“day”).值;
var货币=s.Current.属性(“货币”).价值;
}
但我不知道如何从不同的商店得到所有的货币价值,这些商店有相同的日期和正确的编码
你能帮我弄到所有的吗
提前感谢尝试以下方法:
XDocument doc = XDocument.Load(xmlFileName.xml);
var areaName = doc.Root.Elements("Area");
IEnumerator<XElement> s = areaName.Elements("ShopA").GetEnumerator();
While (s.MoveNext())
{
var day = s.Current.Attribute("Day").Value;
var money = s.Current.Attribute("Money").Value;
}
var moneyDayResultSet=来自单据子代中的收入(“收入”)
选择新{
金钱=收入。属性(“金钱”)。价值,
日=收入。属性(“日”)。价值
};
//循环浏览结果
foreach(moneyDayResultSet中的var moneyDayResult){
如果(moneyDayResult.Day==3)
{
Console.Write(moneydaysult.Money);
}
}
也许是这样的吧
<Area>
<ShopA>
<Income Day="1" Money="100" />
<Income Day="2" Money="90" />
<Income Day="3" Money="80" />
<Income Day="4" Money="70" />
</ShopA>
<ShopB>
<Income Day="3" Money="50" />
<Income Day="4" Money="40" />
</ShopB>
</Area>
var moneyDayResultSet = from Income in doc.Descendants("Income")
select new {
Money = Income.Attribute("Money").Value,
Day = Income.Attribute("Day").Value
};
//Loop through results
foreach (var moneyDayResult in moneyDayResultSet){
if(moneyDayResult.Day == 3)
{
Console.Write(moneyDayResult.Money);
}
}
或者,如果您希望获取所有日期的数据,而不是查询一天的数据:
var doc = XDocument.Load("XMLFile1.xml");
var q =
doc.Root
.Elements()
.Elements()
.Where(e => e.Attribute("Day").Value == "3")
.Select(e => new
{
Shop = e.Parent.Name,
Money = e.Attribute("Money").Value
});
foreach (var e in q)
{
Console.WriteLine("{0} {1}", e.Shop, e.Money);
}
使用XPath,您可以在某一天获得商店中的所有资金,如:
var doc = XDocument.Load("XMLFile1.xml");
var q =
doc.Root
.Elements()
.Elements()
.Select(e => new
{
Day = e.Attribute("Day").Value,
Shop = e.Parent.Name,
Money = e.Attribute("Money").Value
})
.GroupBy(r => r.Day);
foreach (var e in q)
{
Console.WriteLine("Day: {0}", e.Key);
foreach (var i in e)
{
Console.WriteLine("{0} {1}", i.Shop, i.Money);
}
}
Net中的XPath是通过以下方式找到的:
使用System.Xml.XPath
您可以做的一个相对较小的更改是将
.Elements().Elements()
更改为.decentants(“收入”)
。不过,我喜欢这段代码,可能对我有用:)
var doc = XDocument.Load("XMLFile1.xml");
var q =
doc.Root
.Elements()
.Elements()
.Select(e => new
{
Day = e.Attribute("Day").Value,
Shop = e.Parent.Name,
Money = e.Attribute("Money").Value
})
.GroupBy(r => r.Day);
foreach (var e in q)
{
Console.WriteLine("Day: {0}", e.Key);
foreach (var i in e)
{
Console.WriteLine("{0} {1}", i.Shop, i.Money);
}
}
XElement root = XElement.Load(file);
string day = "2";
var shops = root.XPathSelectElements(
string.Format("//Income[@Day='{0}']", day))
.Select(x => new
{
Shop = x.Parent.LocalName,
Money = x.Attribute("Money").Value
});