【发布时间】:2015-09-23 07:53:59
【问题描述】:
我的应用程序设置在一个简单的 XML 文档中,如下所示:
<Settings>
<Server>
<Id>1</Id>
<Name>SRV123456</Name>
<Par Type="Desktop" Region="Western">12</Par>
<Par Type="Laptop" Region="Western">15</Par>
<Par Type="Desktop" Region="Eastern">22</Par>
<Par Type="Laptop" Region="Eastern">25</Par>
<State>WA</State>
</Server>
</Settings>
我正在尝试使用 C# 和 LINQ 查询它,使用以下代码:
xelement = XElement.Load(startpath + "\\Settings.xml");
var sn = from sl in xelement.Elements("Server")
where (string)sl.Element("State") == "WA"
where (string)sl.Element("Par").Attribute("Region") == "Western"
where (string)sl.Element("Par").Attribute("Type") == "Desktop"
select sl;
foreach (XElement xele in sn)
{
Console.WriteLine(xele);
Console.WriteLine(xele.Element("Par").Value);
}
这适用于第一个“Par”值,并将返回“12”。但是如果我改变了
where (string)sl.Element("Par").Attribute("Type") == "Desktop"
到
where (string)sl.Element("Par").Attribute("Type") == "Laptop"
它没有返回任何结果...我错过了什么?
【问题讨论】:
-
尝试混合两种查询方式真的很难看。坚持任何一个(最好 - 代码版本)
-
Element返回文档顺序中的第一个元素。该元素上的属性将被检查。 -
没有理由一个会工作而另一个不会。仔细检查你的拼写和大写/小写字母。
-
@jdweng - 一个可以工作而另一个不能工作是有原因的。它与
Element(vsElements) 和文档中<Par>元素的顺序有关。如果<Par Type="Laptop" Region="Western">15</Par>是文档中名为“Par”的第一个元素,那么第二行可以工作(而第一行不行) -
@Tim - 你应该这样回答。我会赞成。