我有IEnumerable<XElement> rates
,其中包含以下XML /数据。
<results>
<rate id="AUDEUR">
<Name>AUD to EUR</Name>
<Rate>0.6602</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.6604</Ask>
<Bid>0.66</Bid>
</rate>
<rate id="AUDGBP">
<Name>AUD to GBP</Name>
<Rate>0.5391</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.5393</Ask>
<Bid>0.5389</Bid>
</rate>
<rate id="AUDUSD">
<Name>AUD to USD</Name>
<Rate>0.9051</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.9054</Ask>
<Bid>0.9048</Bid>
</rate>
<rate id="EURAUD">
<Name>EUR to AUD</Name>
<Rate>1.5147</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.5153</Ask>
<Bid>1.5141</Bid>
</rate>
<rate id="EURGBP">
<Name>EUR to GBP</Name>
<Rate>0.8166</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.8167</Ask>
<Bid>0.8165</Bid>
</rate>
<rate id="EURUSD">
<Name>EUR to USD</Name>
<Rate>1.3709</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.371</Ask>
<Bid>1.3709</Bid>
</rate>
<rate id="GBPAUD">
<Name>GBP to AUD</Name>
<Rate>1.8549</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.8556</Ask>
<Bid>1.8541</Bid>
</rate>
<rate id="GBPEUR">
<Name>GBP to EUR</Name>
<Rate>1.2246</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.2247</Ask>
<Bid>1.2244</Bid>
</rate>
<rate id="GBPUSD">
<Name>GBP to USD</Name>
<Rate>1.6788</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.679</Ask>
<Bid>1.6787</Bid>
</rate>
<rate id="USDAUD">
<Name>USD to AUD</Name>
<Rate>1.1049</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.1052</Ask>
<Bid>1.1045</Bid>
</rate>
<rate id="USDEUR">
<Name>USD to EUR</Name>
<Rate>0.7294</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.7295</Ask>
<Bid>0.7294</Bid>
</rate>
<rate id="USDGBP">
<Name>USD to GBP</Name>
<Rate>0.5957</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.5957</Ask>
<Bid>0.5956</Bid>
</rate>
</results>
base {System.Xml.Linq.XContainer}: <results>
<rate id="AUDEUR">
<Name>AUD to EUR</Name>
<Rate>0.6602</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.6604</Ask>
<Bid>0.66</Bid>
</rate>
<rate id="AUDGBP">
<Name>AUD to GBP</Name>
<Rate>0.5391</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.5393</Ask>
<Bid>0.5389</Bid>
</rate>
<rate id="AUDUSD">
<Name>AUD to USD</Name>
<Rate>0.9051</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.9054</Ask>
<Bid>0.9048</Bid>
</rate>
<rate id="EURAUD">
<Name>EUR to AUD</Name>
<Rate>1.5147</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.5153</Ask>
<Bid>1.5141</Bid>
</rate>
<rate id="EURGBP">
<Name>EUR to GBP</Name>
<Rate>0.8166</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.8167</Ask>
<Bid>0.8165</Bid>
</rate>
<rate id="EURUSD">
<Name>EUR to USD</Name>
<Rate>1.3709</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.371</Ask>
<Bid>1.3709</Bid>
</rate>
<rate id="GBPAUD">
<Name>GBP to AUD</Name>
<Rate>1.8549</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.8556</Ask>
<Bid>1.8541</Bid>
</rate>
<rate id="GBPEUR">
<Name>GBP to EUR</Name>
<Rate>1.2246</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.2247</Ask>
<Bid>1.2244</Bid>
</rate>
<rate id="GBPUSD">
<Name>GBP to USD</Name>
<Rate>1.6788</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.679</Ask>
<Bid>1.6787</Bid>
</rate>
<rate id="USDAUD">
<Name>USD to AUD</Name>
<Rate>1.1049</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>1.1052</Ask>
<Bid>1.1045</Bid>
</rate>
<rate id="USDEUR">
<Name>USD to EUR</Name>
<Rate>0.7294</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.7295</Ask>
<Bid>0.7294</Bid>
</rate>
<rate id="USDGBP">
<Name>USD to GBP</Name>
<Rate>0.5957</Rate>
<Date>2/17/2014</Date>
<Time>12:07am</Time>
<Ask>0.5957</Ask>
<Bid>0.5956</Bid>
</rate>
</results>
根据这些数据,我需要在DB中添加记录。要添加以下值:
<rate id="AUDEUR">
的<Rate>0.6602</Rate>
开始,在这种情况下,它将是0.6602 <Date>2/17/2014</Date>
我对XML没有多少经验,你能帮助我如何获得这些价值吗?
由于
答案 0 :(得分:0)
您可以使用Linq2Xml
XElement doc=XElement.Load(url);
var elements=doc.Elements("rate")
.Where(x=>
x.Attribute("id").Value=="AUDEUR" &&
(double)x.Element("Rate")>=0.6602 &&
DateTime.Compare((DateTime)x.Element("Date"),DateTime.Parse("2/17/2014"))>=0
)
.Select(e=>
new
{
Id=e.Attribute("id").Value,
Name=e.Element("Name").Value,
Rate=e.Element("Rate").Value....
}
);
现在你可以迭代这样的元素
foreach(var elm in elements)
{
elm.Name;
elm.Rate;
}
答案 1 :(得分:0)
我会创建一个处理费率的类:
class Rate
{
public string Id { get; private set; }
public decimal Value { get; private set; }
public DateTime Date { get; private set; }
// let's make the class immutable
public Rate(string id, decimal value, DateTime date)
{
Id = id;
Value = value;
Date = date;
}
}
并使用LINQ to XML来解析XML:
private static IEnumerable<Rate> GetRates(XElement source)
{
return from r in source.Element("results").Elements("rate")
select new Rate(
(string)r.Attribute("id"),
(decimal)r.Element("rate"),
(DateTime)r.Element("date"));
}
我不确定你为什么说你有IEnumerable<XElement>
,但假设你拥有的是什么,你可以轻松地从IEnumerable<XElement>
获得费率:
var data = rates.SelectMany(x => GetRates(x)).ToList();
它会为您提供List<Rate>
,您可以使用它来更新数据库。
答案 2 :(得分:0)
让我们代表一个如下课程的费率记录:
public class RateRecord {
public string Id { get; set; }
public string Rate { get; set; }
public string Date { get; set; }
}
获取解析率列表:
var rateRecords = new List<RateRecord>();
foreach(var rate in rates) {
rateRecords.Add(new RateRecord {
Id = rate.Attribute("id").Value,
Rate = rate.Element("Rate").Value,
Date = rate.Element("Date").Value
});
}
你也可以编写一个解析方法:
public IEnumerable<RateRecord> ParseRates(IEnumerable<XElement> rates) {
foreach(var rate in rates) {
yield return new RateRecord {
Id = rate.Attribute("id").Value,
Rate = rate.Element("Rate").Value,
Date = rate.Element("Date").Value
};
}
}