2016-08-22 5 views
0

XML解析に役立つ記事が見つかりました: http://geekswithblogs.net/pabothu/archive/2014/04/29/reading-a-complex-xml-using-linq-in-c-sharp.aspxXMLを正しく読み取れません

私はXMLを読み込もうとしていますが、nullオブジェクトを取得しています。私はこれらのLINQクエリにデバッグすることができないので、私が間違っていることを少し混乱させています。

var containers = 
    from container in xmlDoc.Descendants("container") 
    //where container.Attribute("ID").Value != "0" 
    select new Container 
    { 
     id = Convert.ToInt32(container.Element("id").Value), 
     name = container.Element("name").Value, 
     enabled = Convert.ToBoolean(container.Element("enabled").Value), 
     components = new List<Component>(
      from component in container.Descendants("component") 
      select new Component 
      { 
       id = Convert.ToInt32(component.Element("id").Value), 
       name = component.Element("name").Value, 
       type = component.Element("type").Value, 
       connectors = new List<Connector>(
        from connector in component.Descendants("connector") 
        select new Connector 
        { 
         id = Convert.ToInt32(component.Element("id").Value), 
         name = connector.Element("name").Value, 
         source = connector.Element("id").Value, 
         destination = component.Element("id").Value 
        }) 
      }) 
    }; 

そして、ここでXMLです:

<?xml version="1.0" encoding="UTF-8"?> 
<simplevisio> 
    <container> 
    <id>1</id> 
    <name>Naming</name> 
    <component> 
     <id>2</id> 
     <type>Server</type> 
     <name>First</name> 
     <connector> 
     <id>3</id> 
     <name>.</name> 
     </connector> 
     <connector> 
     <id>5</id> 
     <name>isShortName()</name> 
     </connector> 
    </component> 
    <component> 
     <id>3</id> 
     <type>Server</type> 
     <name>Last</name> 
     <connector> 
     <id>5</id> 
     <name>isShortName()</name> 
     </connector> 
    </component> 
    <enable>true</enable> 
    <connector> 
     <id>5</id> 
     <name>getFullname()</name> 
    </connector> 
    </container> 
    <container> 
    <id>4</id> 
    <name></name> 
    <component> 
     <id>5</id> 
     <type>Server</type> 
     <name>FirstLast</name> 
    </component> 
    <enable>false</enable> 
    </container> 
</simplevisio> 
+0

_ "nullオブジェクトを取得しています" _ - nullオブジェクトを取得していますか?最後の 'containers'変数は決してnullにはなりません。他の値の一部は値型のように見えるので、nullにすることもできません。より具体的にしてください。 –

答えて

2

あなたはを照会しているがD要素を有効にするが、あなたのサンプルXMLは要素を有効含まれています。だからあなたはNullReferenceExceptionを得ているのです。

変更

enabled = Convert.ToBoolean(container.Element("enabled").Value), 

enabled = Convert.ToBoolean(container.Element("enable").Value), 

またはあなたのクエリに一致するように、あなたのXMLスキーマを更新します。

関連する問題