XElement.Element为新创建的元素返回null
我使用XElement
创建XMLDocument
,它在层次结构WPF树视图中使用。如果我创建一个新的元素与:XElement.Element为新创建的元素返回null
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是空的,但我可以在看调试器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;
}
}
虽然上述工作,我只是好奇,为什么我得到空返回。我的解决方法是做到这一点的最佳方式吗?
问候。
您已定义的XElement这样的:
x_element = new XElement("node", /* child nodes */);
哪里"node"
是XElement
您创建,和下面的参数是其孩子的名字。
通过使用x_element.Node("node")
,您试图获取名为"node"
的子节点,并且没有这样的子节点。 x_element
本身是名为“节点”的节点。 DescendantsAndSelf
因为它包含x_element
(因此称为“AndSelf”),但您不需要这个,因为您已经拥有该节点。
所以,你可以改变你的第二个代码段将:
x_element.SetAttributeValue("title", strData[7] + " " + strData[6] + " " + strData[5]);
x_element.SetAttributeValue("canEdit", "False");
// etc.
(顺便说一句,你还可以添加在构造函数中的属性)
感谢您的回复和解释,它的确有助于澄清我对XElements的理解。 – SteveP 2013-05-08 08:18:45
因为你的第一个temp_el
,
XElement temp_el = x_element.Element("node");
您曾经获得不被视为x_element元素的节点。
它被视为根。然而,第二个,
x_element.DescendantsAndSelf()`
您使用该XElement
方法,把节点自身作为元素。
XContainer.Elements Method - 以文档顺序返回此元素或文档的子元素的集合。
XElement.DescendantsAndSelf Method - 返回包含该元素的元素,而这种元素的所有后代元素的集合,按文档顺序。
的回答解决什么错,但最好的方法方面:对于'新XElement'构造还允许您与您已经添加了'新XElement's沿着加上'新XAttribute's 。 – AakashM 2013-05-08 08:02:06