[英]Why doesn't linq to xml recognize my the attributes in my XML file?
我是LINQ to XML的新手(对LINQ to sql很满意),并通过本教程http://www.joe-stevens.com/2010/01/08/linq-to-xml-tutorial/学习了自己的方法。
当我写这个linq查询时
Dim data As XDocument = XDocument.Load(xmlFileLocation)
Dim outputFileLoc = (From c In data.Descendants("Program") Where c.Attribute("ProgramName").Equals("EnviroEpi") Select c)
在此XML文件上:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Programs>
<Program ProgramName="EnviroEpi">
<Type>csv</Type>
<Location>test</Location>
</Program>
<Program ProgramName="Epi">
<Type>HL7</Type>
<Location>test</Location>
</Program>
<Program ProgramName="Lead">
<Type>csv</Type>
<Location>test</Location>
</Program>
</Programs>
我收到一个错误:
序列不包含任何元素
这是否意味着LINQ无法看到我的程序节点的ProgramName
属性? 还是我想念其他东西? 据我所知,我所做的一切都与本教程完全相同。
再次感谢您的帮助。 我真的只是对LINQ to XML有所了解。
编辑
... where c.attribute("ProgramName").Equals("EnviroEpi") // returns no elements.
这有效:
c.attribute("ProgramName").value.equals("EnviroEpi") //added in .value to get it to work
您不希望Descendants("Programs").Descendants
,该函数将返回Programs
元素的任何后代 -大多数元素不相关且没有ProgramName属性,因此得到NullReferenceException
。
您还需要使用Attribute("ProgramName").value.Equals("EnviroEpi")
来获取程序名称属性的值。
您需要Descendants("Program")
代替:
Dim outputFileLoc = (From c In data.Descendants("Program") Where c.Attribute("ProgramName").Equals("EnviroEpi") Select c).First
问题很可能是data.Descendants("Programs")
或data.Descendants("Programs").Descendants
为null。 您需要在此过程中执行空检查,您不能真的像完成操作一样将一堆对象链接在一起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.