我正在尝试使用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异常。 有什么想法吗?
答案 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;
问候。