C# Linq to XML正在返回Null

C# Linq to XML正在返回Null,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我试图使用LINQtoXML来查找Title=Standard的命令栏,并在其中插入一个新的控件元素。然而,在我的代码中,当我尝试使用Where时,我得到一个空值。我不确定我做错了什么 更新 在尝试获取属性值时,我得到一个空值。我发现并非所有CommandBar标记都将标题作为属性。我如何忽略那些CommandBar标记?您缺少的元素 这对我来说很管用,可以修复丢失的结束标记/ 更新以处理属性为空的可能性。您缺少元素 这对我来说很管用,可以修复丢失的结束标记/ 更新以处理attrib为null的

我试图使用LINQtoXML来查找Title=Standard的命令栏,并在其中插入一个新的控件元素。然而,在我的代码中,当我尝试使用Where时,我得到一个空值。我不确定我做错了什么

更新

在尝试获取属性值时,我得到一个空值。我发现并非所有CommandBar标记都将标题作为属性。我如何忽略那些CommandBar标记?

您缺少的元素

这对我来说很管用,可以修复丢失的结束标记/

更新以处理属性为空的可能性。

您缺少元素

这对我来说很管用,可以修复丢失的结束标记/

更新以处理attrib为null的可能性。

要避免没有Title属性的CommandBar元素,只需在Where中添加null检查

此外,您还可以将.Wherelamda.FirstOrDefault替换为.FirstOrDefaultlambda。

为了避免没有Title属性的CommandBar元素,只需在Where中添加一个空检查

还可以将.Wherelamda.FirstOrDefault替换为just.FirstOrDefaultlambda

我发现并非所有CommandBar标记都将标题作为属性。我怎么能忽略那些CommandBar标签呢

只需将其添加到Where子句中:

请注意,在调用.AddAfterSelfnewElement之前,还需要进行null检查

我发现并非所有CommandBar标记都将标题作为属性。我怎么能忽略那些CommandBar标签呢

只需将其添加到Where子句中:


请注意,在调用.AddAfterSelfnewElement之前,还需要进行null检查

你是说FirstOrDefault返回null吗?或者您是否从item.AttributeTitle获取空值?空值具体出现在哪里?在调试器中对其进行修改,然后依次检查查询部分:xDoc.ElementLastLayout2、xDoc.ElementLastLayout2.ElementCommandBars、xDoc.ElementLastLayout2.elementCommandBari更新了帖子。我发现并非所有的命令栏都有相同的属性。你是说FirstOrDefault返回null吗?或者您是否从item.AttributeTitle获取空值?空值具体出现在哪里?在调试器中对其进行修改,然后依次检查查询部分:xDoc.ElementLastLayout2、xDoc.ElementLastLayout2.ElementCommandBars、xDoc.ElementLastLayout2.elementCommandBari更新了帖子。我发现并非所有的命令栏都具有相同的属性。
<LastLayout2 CompactMode="1" Schema="37">
<CommandBars>
...
<CommandBar Class="CXTPToolBar" BarID="200" Flags="63" Style="4194304" Title="Standard" MRUWidth="32767">
      <Controls>
        <Control Class="CXTPControlButton" Id="5864" Parameter="3000" />
        <Control Class="CXTPControlButton" Id="5866" Parameter="3001" />
        <Control Class="CXTPControlButton" Id="5868" Parameter="3002" />
        <Control Class="CXTPControlButton" Id="24322" BeginGroup="1" Parameter="3003" />
        <Control Class="CXTPControlButton" Id="24323" Parameter="3004" />
        <Control Class="CXTPControlButton" Id="24324" Parameter="3005" />
        <Control Class="CXTPControlButton" Id="24325" Parameter="3006" />
        <Control Class="CXTPControlButton" Id="24321" BeginGroup="1" TooltipText="Undo" DescriptionText="Undo" Parameter="3007" />
        <Control Class="CXTPControlButton" Id="24329" TooltipText="Redo" DescriptionText="Redo" Parameter="3008" />
        <Control Class="CXTPControlButton" Id="6184" BeginGroup="1" Parameter="3009" />
        <Control Class="CXTPControlButton" Id="6190" Parameter="3010" />
        <Control Class="CXTPControlButton" Id="6148" Parameter="3011" />
        <Control Class="CXTPControlButton" Id="6211" BeginGroup="1" Parameter="3012" />
        <Control Class="CXTPControlButton" Id="5796" BeginGroup="1" Parameter="3013" />
        <Control Class="CXTPControlButton" Id="5774" Parameter="3014" />
        <Control Class="CXTPControlButton" Id="5792" Parameter="3015" />
        <Control Class="CXTPControlButton" Id="5048" Parameter="3016" />
        <Control Class="CXTPControlButton" Id="5130" BeginGroup="1" Parameter="3017" />
        <Control Class="CXTPControlButton" Id="5936" Parameter="3018" />
        <Control Class="CXTPControlButton" Id="5844" Parameter="3019" />
        <Control Class="CXTPControlButton" Id="6170" BeginGroup="1" Parameter="3020" />
        <Control Class="CXTPControlButton" Id="6182" Parameter="3021" />
        <Control Class="CXTPControlButton" Id="6384" BeginGroup="1" Parameter="3022" />
        <Control Class="CXTPControlButton" Id="6385" Parameter="3023" />
        <Control Class="CXTPControlButton" Id="6386" Parameter="3024" />
        <Control Class="CXTPControlButton" Id="32769" BeginGroup="1" Parameter="3025" />
      </Controls>
    </CommandBar>
</CommandBars>
</LastLayout2>
XElement newElement = new XElement("Control");
                XAttribute classAt = new XAttribute("Class", "CXTPControlButton");
                XAttribute idAt = new XAttribute("Id", "0");
                XAttribute paramAt = new XAttribute("Parameter", "GLOBAL!QMS_Launcher.Main");
                XAttribute custIdAt = new XAttribute("CustomIconId", "68267");

XElement customIcon = new XElement("CustomIcon");
XElement icon = new XElement("Icon");
XAttribute width = new XAttribute("Width", "16");
XAttribute data = new XAttribute("Data", "AAB");

icon.Add(width, data);

customIcon.Add(icon);
newElement.Add(customIcon);

newElement.Add(classAt, idAt, paramAt, custIdAt);

xDoc.Element("LastLayout2")
    .Element("CommandBars")
    .Elements("CommandBar")
    .Where(item => item.Attribute("Title").Value == "Standard").FirstOrDefault()
    .AddAfterSelf(newElement);

xDoc.Save(cust_file);
xDoc.Element("LastLayout2")
    .Element("CommandBars")
    .Elements("CommandBar")
    .Where(item => (string)item.Attribute("Title") == "Standard").FirstOrDefault()
    .Element("Controls")
    .Add(newElement);
.Where(item => item.Attribute("Title") != null 
               && item.Attribute("Title").Value == "Standard")
.Where(item => item.Attribute("Title") != null && item.Attribute("Title").Value == "Standard").FirstOrDefault()