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;
大家有没有找到这两者写法上的区别,唯一的区别就在于错误的写法多了一个
这个是我们很容易犯的错误,按照节点上来说,第一个节点应该是【Tests】,个人理解是在使用 load方法时就已经是第一层级的根节点了。总之第一层级的节点不需要写,这样查询的结果才不会有问题。
后来通过在网上查找资料,发现了一个不错的学习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方法时就已经是第一层级的根节点了。总之第一层级的节点不需要写,这样查询的结果才不会有问题。
相关文章推荐
- Linq to XML 排序,分页,多节点查询数据
- C#程序中使用LINQ to XML来查询XML格式数据的实例
- hibernate mapping文件中 xmlns会导致linq to xml 查询不到对应的节点
- Linq to XML用XmlReader读取数据导致无法输出的格式化异常的问题
- VS2008下使用Linq To Entity的Skip().Take()分页查询时遇到数据结果不对的问题
- 是否会成为问题——Linq to Sql的执行可能无法复用查询计划
- 读取xml通过deserialize和linq to sql快速更新数据表
- Linq to SQL 插入数据时的一个问题
- Linq to Sql 更新数据时容易忽略的问题
- linq to sql 学习(11)linq 构造更完美的动态数据查询(可扩展)
- 读取xml通过deserialize和linq to sql快速更新数据表
- LINQ to XML 用 LINQ 查询 XML
- Linq to SQL 插入数据时的一个问题
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树!
- Linq to SQL数据乱码问题
- LINQ to XML 用 LINQ 查询 XML
- linq to sql取出随机记录/多表查询/将查询出的结果生成xml
- System.Xml.XmlDocument.SelectNodes() 查询不到节点问题?
- ajax中用responseXML读取不到中文数据的问题
- Linq to XML说法——(一)创建,添加,查询