C# Linq到XML条件化属性
这是我的xmlC# Linq到XML条件化属性,c#,xml,linq,C#,Xml,Linq,这是我的xml <DataSet xmlns="http://www.bnr.ro/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bnr.ro/xsd nbrfxrates.xsd"> <Header> <Publisher>National Bank of Romania</Publisher
<DataSet xmlns="http://www.bnr.ro/xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bnr.ro/xsd nbrfxrates.xsd">
<Header>
<Publisher>National Bank of Romania</Publisher>
<PublishingDate>2016-03-24</PublishingDate>
<MessageType>DR</MessageType>
</Header>
<Body>
<Subject>Reference rates</Subject>
<OrigCurrency>RON</OrigCurrency>
<Cube date="2016-03-24">
<Rate currency="EUR">4.4655</Rate>
</Cube>
<Cube date="2016-03-23">
Rate currency="EUR">4.4641</Rate>
</Cube>
</Body>
</DataSet>
罗马尼亚国家银行
2016-03-24
博士
参考利率
罗恩
4.4655
汇率币种=“欧元”>4.4641
我想验证多维数据集属性日期以接收昨天日期的欧元值
例如,如果今天是2016-03-24,我希望收到2016-03-23的值4.4641
我尝试使用LINQ转换XML
string date_yesterday = DateTime.Now.AddDays(-1).Date.ToString("yyyy-MM-dd");
XElement root = XElement.Parse(sbXmlText.ToString());
IEnumerable<XElement> adress =
from el in root.Descendants("Cube")
let z = el.ElementsAfterSelf().FirstOrDefault()
where z != null && (string)el.Attribute("date") == date_yesterday
select el;
foreach (XElement el in adress)
Console.WriteLine(el);
string date\u dayed=DateTime.Now.AddDays(-1.date.ToString(“yyyy-MM-dd”);
XElement root=XElement.Parse(sbXmlText.ToString());
可数地址=
从root.subjects(“多维数据集”)中的el开始
设z=el.ElementsAfterSelf().FirstOrDefault()
z!=null&&(字符串)el.Attribute(“日期”)==日期
选择el;
foreach(地址中的XElement el)
控制台写入线(el);
并尝试
string date_yesterday = DateTime.Now.AddDays(-1).Date.ToString("yyyy-MM-dd");
XElement root = XElement.Parse(sbXmlText.ToString());
IEnumerable<XElement> adress =
root.Descendants("Cube").Where(r => r.Attribute("date").Value == date_yesterday);
foreach (XElement el in adress)
Console.WriteLine(el);
string date\u dayed=DateTime.Now.AddDays(-1.date.ToString(“yyyy-MM-dd”);
XElement root=XElement.Parse(sbXmlText.ToString());
可数地址=
其中(r=>r.Attribute(“date”).Value==date\u);
foreach(地址中的XElement el)
控制台写入线(el);
并且每次返回null时,它都会返回XML具有默认名称空间的值。您可以使用“XNamespace
+元素的本地名称”引用命名空间中的元素,例如:
var xml = @"<DataSet xmlns='http://www.bnr.ro/xsd'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation='http://www.bnr.ro/xsd nbrfxrates.xsd'>
<Header>
<Publisher>National Bank of Romania</Publisher>
<PublishingDate>2016-03-24</PublishingDate>
<MessageType>DR</MessageType>
</Header>
<Body>
<Subject>Reference rates</Subject>
<OrigCurrency>RON</OrigCurrency>
<Cube date='2016-03-24'>
<Rate currency='IDR'>1.1111</Rate>
<Rate currency='EUR'>4.4655</Rate>
</Cube>
<Cube date='2016-03-23'>
<Rate currency='EUR'>4.4641</Rate>
</Cube>
</Body>
</DataSet>";
var doc = XDocument.Parse(xml);
//XNamespace that reference default namespace URI:
XNamespace d = "http://www.bnr.ro/xsd";
var yesterday = DateTime.Now.AddDays(-1).Date;
//Use `XNamespace+element's local-name` to reference element in namespace:
var result = (from cube in doc.Descendants(d+"Cube")
from rate in cube.Elements(d+"Rate")
where
((DateTime)cube.Attribute("date")).Date == yesterday
&&
(string)rate.Attribute("currency") == "EUR"
select (decimal)rate
).FirstOrDefault();
Console.WriteLine(result);
你不能复制粘贴XML,而不是发布它的图片吗?谢谢。我还有一个问题。如果我有两个带有Rate的标记,并且我想要一个where currency=“EUR”我将在select子句中写入一个相等的条件?@raluciaonescu您可以使用LINQ
SelectMany()
construct(翻译为)并在where
子句中添加货币过滤器。请参阅更新的答案
4.4641