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