尝试在两个Xml文档之间进行连接时出现NullReferenceException

时间:2014-07-11 18:26:38

标签: c# xml linq join nullreferenceexception

我有一个Xml文档看起来像这样(它包含更多显示的父母和子女):

<item cid="0x12e3">
    <item cid="0x1310">
        <item cid="0x158b">
            <item luid="2001"/>
            <item luid="2002"/>
        </item>
        <item cid="0x13313">
            <item luid="2001"/>
            <item luid="2002"/>
        </item>
        ... 
    </item>
</item>

并且我还有一个Xml文档,其中包含以下属性:

<?xml version="1.0" encoding="UTF-8"?>
<EditorRule>
     <Properties>
         <Property name="Comment" luid="2001"/>
         ...
     </Properties>
</EditorRule>

现在,我在两个文件之间Join Select XElements来自first xml的{​​{1}} Second xml < / p>

(from element in Element.Elements().Elements().Elements()
            join property in propertiesFromFile on element.Attribute("luid").Value equals property.Luid 
            select new IpjItem(element));

这很好用,当我对此IEnumerable进行迭代时,它会打印Name="Comment",依此类推。

我的问题是它只适用于第一个XElement.所以,回到first Xml。它仅使用Children从节点打印cid = 0x158b。完成该元素后,它会抛出NullReferenceException而不会转到cid = 0x13313的那个。为什么会这样?

谢谢!

1 个答案:

答案 0 :(得分:0)

是。在@Selman22警觉推断时,我的问题出在Element.Elements()。我还添加了一个更好的Where子句来检查属性是否存在。

return (from element in Element.Elements()
            where element.Attribute("luid") != null
            join property in RuleEditorXml.Properties on element.Attribute("luid").Value equals property.Luid
            select new IpjItem(element, Parent));