簡體   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