2016-08-22 142 views
0

我找到了一篇帮助XML解析的文章: http://geekswithblogs.net/pabothu/archive/2014/04/29/reading-a-complex-xml-using-linq-in-c-sharp.aspx无法正确读取XML

我想读取XML,但我得到一个空对象。我有点困惑,我做错了,因为我无法调试到这些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

_“我得到一个空对象”_ - 获取空对象在哪里?最终的'containers'变量不能为空。其他一些值似乎是值类型,所以也不能为空。请更具体一些。 –

回答

2

你查询使d元素,但示例XML包含使元素。这就是为什么你得到NullReferenceException

变化

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

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

或更新您的XML架构,以符合您查询。