c# - XElement.Element 为新创建的元素返回 null

标签 c# xml linq xelement

我正在使用 XElement 创建一个在分层 WPF TreeView 中使用的 XMLDocument。如果我使用以下命令创建一个新元素:

    x_element = new XElement("node",
    new XElement("tree_id", strData[0]),
    new XElement("sys_id", dpl.DepSysId),
    new XElement("part_id", strData[8]),
    new XElement("make", strData[6]),
    new XElement("model", strData[5]),
    new XElement("level", strData[2]));

然后我需要向“节点”添加属性,所以我尝试了:

   XElement temp_el = x_element.Element("node"); // This is returning null
   temp_el.SetAttributeValue("title", strData[7] + " " + strData[6] + " " + strData[5]);
   temp_el.SetAttributeValue("canEdit", "False");
   temp_el.SetAttributeValue("status", nStatus.ToString());
   temp_el.SetAttributeValue("qty", strData[13]);
   temp_el.SetAttributeValue("part", strData[8]);

在上面的代码中 temp_el 为 null,但我可以在调试器中看到 x_element 包含以下内容:

<node>
  <tree_id>82</tree_id>
  <sys_id>82</sys_id>
  <part_id>169</part_id>
  <make>ST Panel</make>
  <model>Logical Pure 16 tube Collector</model>
  <level>0</level>
</node>

为了解决这个问题,我使用了以下方法:

   foreach (XElement temp_el in x_element.DescendantsAndSelf())
   {
       if (temp_el.Name == "node")
       {
           temp_el.SetAttributeValue("title", strData[7] + " " + strData[6] + " " + strData[5]);
           temp_el.SetAttributeValue("canEdit", "False");
           temp_el.SetAttributeValue("status", nStatus.ToString());
           temp_el.SetAttributeValue("qty", strData[13]);
           temp_el.SetAttributeValue("part", strData[8]);
           break;
       }
   }

虽然上述方法有效,但我只是好奇为什么我会返回 null。我的解决方法是执行此操作的最佳方法吗?

问候。

最佳答案

您像这样定义了 XElement:

x_element = new XElement("node", /* child nodes */);

其中 "node" 是您正在创建的 XElement 的名称,以下参数是其子元素。

通过使用x_element.Node("node"),您试图获取名为"node"的子节点,但不存在这样的子节点.
x_element 本身是名为“node”的节点。
DescendantsAndSelf 可以工作,因为它包含 x_element (因此是“AndSelf”),但您也不需要它,因为您已经拥有该节点。

因此您可以将第二个代码片段更改为:

x_element.SetAttributeValue("title", strData[7] + " " + strData[6] + " " + strData[5]);
x_element.SetAttributeValue("canEdit", "False");
// etc.

(顺便说一句,您也可以在构造函数中添加属性)

关于c# - XElement.Element 为新创建的元素返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16435125/

相关文章:

使用 google chrome 时出现 jquery xml 问题

c# - Linq 过滤器数组,包含从基类型继承的多种类型

c# - 在 Datagridview 中插入时出错

c# - Web API 删除方法不起作用

c# - 委托(delegate)变量未被垃圾收集

c# - 获取蓝牙端口名称

c# - 如何使用 X509 证书对 xml 进行签名,将摘要值和签名添加到 xml 模板

xml - XSD 可以定义通配符复杂类型吗?

c# - LINQ - 根据类型获取子集

c# - 使用 C# 将数据表转换为分层数据结构 (JSON)