无法从XML文件中获取所有标记

时间:2014-05-25 02:30:54

标签: xml linq

我遇到了从我的XML文件中获取所有标记的问题。在我的XML文件中,我有一个包含描述的选项标签。

<selection id="1">
    <desc>You see a cat stuck up in a tree, do you</desc>
    <option>
        <desc goto_id="2">Help the cat</desc>
        <desc goto_id="3">Leave the cat stuck in the tree</desc>
    </option>
</selection>

我已经设法从选择中获取描述和ID,但是当我尝试在对象上创建一个数组时,它只会在我循环时获得第一个数组。

var selectionQueryNew = from selection in xml.Root.Descendants("selection")
                        select new {
                            Desc = selection.Element("desc").Value,
                            Id = selection.Attribute("id").Value,
                            Options = selection.Elements("option")
                                .Select(option => new {
                                    Desc = option.Element("desc").Value
                                }).ToArray()
                        };

我认为.Select区域存在问题,为什么它只会从XML文件中选择第一个描述?

1 个答案:

答案 0 :(得分:0)

您只看到第一个描述的原因是您的LINQ查询的这一部分:

Options = selection.Elements("option")
                   .Select(option => new {
                       Desc = option.Element("desc").Value
                    }).ToArray()

代码说得到所有名为&#34;选项&#34;从selection中的集合中,然后从名为&#34;选项&#34;的元素集合中选择一个元素。你想要做的是获得&#34; desc&#34; &#34;选项&#34;下的元素:

var selectionQueryNew = from selection in xml.Root.Descendants("selection")
                        select new
                        {
                            Desc = selection.Element("desc").Value,
                            Id = selection.Attribute("id").Value,
                            Options = selection.Element("option").Elements("desc")
                                      .Select(option => new
                                      {
                                          Desc = option.Value
                                      }).ToArray()
                         };

在上面的代码中,对`selection.Element(&#34; option&#34;)返回的元素集合执行select。元素(&#34; desc&#34;),它捕获所有数组中的描述。