将xml解析为匿名类型

时间:2014-06-13 19:21:09

标签: c# c#-4.0

我正在尝试解析下面的xml,将id_name / rel_no对加载到匿名类型集合中。循环遍历集合时以及其中一个元素中缺少元素时遇到问题。当缺少其中一个元素id_name或rel_no时,有没有办法不加载特定的对?

当循环到达具有缺少元素的特定对时,我得到InvalidOperationException(序列不包含元素)。

感谢您的任何建议。

XDocument xdata = XDocument.Parse(data);

var query = from dox in xdata.Descendants("Inc")
                        select new
                        {
                            IDName= dox.Element("id_name").Value,
                            RelNo= dox.Descendants("rel_no").First().Value
                        };

XML

<Data>

<Inc>
    <id_name>test</id_name> 
    <Relationships>
        <Relationship>
            <rel_no>004</rel_no> 
        </Relationship>
    </Relationships>
</Inc>
<Inc>
    <id_name>test2</id_name> 
    <Relationships>
        <Relationship>
        </Relationship>
    </Relationships>
</Inc>
<Inc>
    <id_name>test3</id_name> 
    <Relationships>
        <Relationship>
            <rel_no>006</rel_no> 
        </Relationship>
    </Relationships>
</Inc>

</Data>

循环访问

foreach (var record in query)
            {
            }

1 个答案:

答案 0 :(得分:2)

var xdata = XDocument.Parse(data);
var items = xdata.Descendants("Inc")
            .Select(d => new
            {
                DName = (string)d.Element("id_name"),
                RelNo = ((string)d.Descendants("rel_no").FirstOrDefault() ?? "")
            })
            .ToList();