您的位置:首页 > 其它

Linq to XML:查询不到数据的问题

2017-04-01 21:56 441 查看
今天在调试对XML进行查询数据时,发现查找到的数据总是为零。

后来通过在网上查找资料,发现了一个不错的学习LinqtoXml的网站:https://msdn.microsoft.com/zh-cn/library/mt693116.aspx,也正是通过对该例子的分析查找到了问题所在。

举个例子:

XML文件:

<?xml version="1.0"?>
<Tests>
<Test TestId="0001" TestType="CMD">
<Name>Convert number to string</Name>
<CommandLine>Examp1.EXE</CommandLine>
<Input>1</Input>
<Output>One</Output>
</Test>
<Test TestId="0002" TestType="CMD">
<Name>Find succeeding characters</Name>
<CommandLine>Examp2.EXE</CommandLine>
<Input>abc</Input>
<Output>def</Output>
</Test>
<Test TestId="0003" TestType="GUI">
<Name>Convert multiple numbers to strings</Name>
<CommandLine>Examp2.EXE /Verbose</CommandLine>
<Input>123</Input>
<Output>One Two Three</Output>
</Test>
<Test TestId="0004" TestType="GUI">
<Name>Find correlated key</Name>
<CommandLine>Examp3.EXE</CommandLine>
<Input>a1</Input>
<Output>b1</Output>
</Test>
<Test TestId="0005" TestType="GUI">
<Name>Count characters</Name>
<CommandLine>FinalExamp.EXE</CommandLine>
<Input>This is a test</Input>
<Output>14</Output>
</Test>
<Test TestId="0006" TestType="GUI">
<Name>Another Test</Name>
<CommandLine>Examp2.EXE</CommandLine>
<Input>Test Input</Input>
<Output>10</Output>
</Test>
</Tests> 在对该XML文件进行查询时,若语句为:
XElement root = XElement.Load("TestConfig.xml");
IEnumerable<XElement> tests =
from el in root.Elements("Tests").Elements("Test")
where (string)el.Element("CommandLine") == "Examp2.EXE"
select el;  是无法查找到数据的。
正确的写法是:

XElement root = XElement.Load("TestConfig.xml");
IEnumerable<XElement> tests =
from el in root.Elements("Test")
where (string)el.Element("CommandLine") == "Examp2.EXE"
select el;

大家有没有找到这两者写法上的区别,唯一的区别就在于错误的写法多了一个  
.Elements("Tests")。

这个是我们很容易犯的错误,按照节点上来说,第一个节点应该是【Tests】,个人理解是在使用 load方法时就已经是第一层级的根节点了。总之第一层级的节点不需要写,这样查询的结果才不会有问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: