无法使用LINQ选择XElements

时间:2014-09-24 15:16:44

标签: c# xml linq

我正在尝试使用LINQ选择节点,但我无法理解为什么这个简单的查询不起作用。

我的xml是这样的:

<config>
  <func_list current_app="GSCC" flag="0">
    <func id="GSCC">
      <BLOCKS>
        <BLOCK id="1" type="ACTIONS">
          <ITEMS>
            <ITEM id="1" type="UINT32" size="1" value="1" />
            <ITEM id="2" type="UINT32" size="1" value="5" />
            <ITEM id="3" type="UINT32" size="1" value="0" />
          </ITEMS>
        </BLOCK>
      </BLOCKS>
    </func>
  </func_list>
</config>

现在,我有一个指向'func'节点的XElement(_funcNode):

IEnumerable<XElement> xBlocks = from el in _funcNode.Descendants("BLOCK")
                                where el.Attribute("type").Value == "ACTIONS"
                                select el;

if (!xBlocks.Any()) return false;

xBlocks.Any()也会抛出System.NullReferenceException异常。 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你的主要问题是你的查询没有加起来你的xml。

IEnumerable<XElement> xBlocks = from el in _funcNode.Descendants("BLOCK")

您想要使用的是

_funcNode.Descendants().Elements("BLOCK")

尝试这样做

var doc = _funcNode.Descendants("BLOCK") 

查看doc是什么样的。

答案 1 :(得分:0)

我解决了将查询更改为:

IEnumerable<XElement> xBlocks = from el in _funcNode.Descendants("BLOCK")
                                where (string)el.Attribute("type") == "ACTIONS"
                                select el;

问候。