繁体   English   中英

为什么linq to xml无法识别我的XML文件中的属性?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM