2012-03-21 7 views
0

私はXMLにLINQの新ブランド(LINQ to SQLは快適に)だと私は、このXMLファイルにこのLINQクエリXMLファイルのlinqがxmlに自分の属性を認識させないのはなぜですか?

Dim data As XDocument = XDocument.Load(xmlFileLocation) 
Dim outputFileLoc = (From c In data.Descendants("Program") Where c.Attribute("ProgramName").Equals("EnviroEpi") Select c) 

を書くとき、このチュートリアル http://www.joe-stevens.com/2010/01/08/linq-to-xml-tutorial/

の周り私の方法を学びます:

<?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> 

私はエラーを取得する:

Sequence contains no elements

これは、LINQが自分のプログラムノードのProgramName属性を認識できないことを意味しますか?あるいは私は何か他のものを逃していますか私が知る限り、私はチュートリアルのようにすべてをやっています。

もう一度お手伝いします。私は本当にXMLへのLINQを感じているだけです。

編集

... where c.attribute("ProgramName").Equals("EnviroEpi") // returns no elements. 

これは動作します:

c.attribute("ProgramName").value.equals("EnviroEpi") //added in .value to get it to work 
+0

ファースト - そしてあなたの価値 - - その後、クロージング 'それはあなたがそこに持っている有効なXMLません.....あなたはオープニング' 'を持っている必要があります ' - ' ....と同じです....' .... –

+0

あなた自身の答えを決定的な答えとして追加し、そのようにマークしてください。 – jessehouwing

答えて

1

、 - 関係ないとの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 
0

問題がdata.Descendants("Programs")data.Descendants("Programs").Descendantsがnullである可能性が最も高いです。あなたは途中でヌルチェックをする必要があります、あなたは本当にあなたが行ったようにオブジェクトの束を束ねることはできません。 Programs要素の子孫返すでしょうあなたはDescendants("Programs").Descendantsたくない

関連する問題