2017-12-10 7 views
0

こんにちは、私はLINQでXMLファイルを読み込むしようとします。LINQの

ファイルの名前は次のとおりです。categorizedBooks.xml

と、ファイルの内容は次のようになります。

XElement rootss = XElement.Load(@"D:/categorizedBooks.xml"); 
     XElement dotNetCategoryss = rootss.Element("category"); 
     XAttribute namehallo = dotNetCategoryss.Attribute("name"); 
     XElement booksss = dotNetCategoryss.Element("books"); 
     IEnumerable<XElement> bookElements = booksss.Elements("book"); 

     Console.WriteLine((string)dotNetCategoryss); 
     foreach (XElement bookElement in bookElements) 
     { 
      Console.WriteLine(" - " + (string)bookElement); 
     } 
:ファイルを読み込むためのコードは次のようになります

<category name=".NET"> 
<books> 
<book>CLR via C#</book> 
<book>Essential .NET</book> 
</books> 
</category> 

しかし、私はこの行にヌルを返します:

XAttribute namehallo = dotNetCategoryss.Attribute("name"); 

これを修正する方法は、nullにならないようにすることです。

答えて

1

あなたのドキュメントルートは、カテゴリ要素でいただきありがとうございます - 試してみてください。

XAttribute namehallo = rootss.Attribute("name"); 
Console.WriteLine(namehallo.Value); 

は、あなたが同様に

+0

しかし、何がこの要素になるでしょうか? XAttributeブック= dotNetCategoryss。( "books"); – LikeToDo

+0

'dotNetCategoryss'はnullです。ルート要素の下に 'category' *という名前のElementはありません(それ自体がcategoryという名前です)。 'dotNetCategoryss'の子への参照はヌルポインター例外を投げます – Black

+0

それを以下に変更してください:' XElement booksss = rootss.Element( "books"); ' – Black

0

代わりのXElement.Loadあなたの他のXElementの参照を変更する必要があります使用XDocument.LoadまたはXDocument.Parse

var xml = @" 
<category name='.NET'> 
    <books> 
     <book>CLR via C#</book> 
     <book>Essential .NET</book> 
    </books> 
</category>"; 

var document = XDocument.Parse(xml); 

// returns: .NET 
var category = document 
    .Element("category") 
    .Attributes("name") 
    .Select(p => p.Value); 

// returns: CLR via C#, Essential .NET 
var books = document 
    .Descendants("book") 
    .Select(p => p.Value); 
+0

ありがとう。 OK。しかし、私は本当にxmlファイルに入れたいと思っています – LikeToDo

+0

Blackさんは作品を投稿しましたが、これをどのように動作させるのですか? XAttributeブック= dotNetCategoryss。( "books"); – LikeToDo

+0

ファイルからxmlを読み込むためのuriを受け入れるので、XDocument.Loadに言及しました。 –