使用XLinq,您似乎必须知道要访问特定子元素的元素子元素的确切名称。我希望在没有这种紧密耦合的情况下递归地访问/发现元素的直接子元素。
如果我有:
<根>
<级别1 />
<级别1 />
< 1级>
< level2.1>
< level2.2>
< level2.2.1 />
< /level2.2>
< / 1级>
<级别1 />
< /根>
在查找“root”的子节点时,root.Elements()。Count()返回7 - 我想要4(“level1”节点)。如果我问root.Elements(“level1”),我会得到4.但我必须知道子元素的名称。
问题:如何在不知道元素名称的情况下访问直系孩子?这将在XML树中的任何递归位置?
感谢。
---新添加:代码 --q1 == 7,q2 == 8和q3 == 4。 但是,如果你遍历q3的元素,你可以访问所有7个子节点而不是我想要的4个子节点。如果这意味着只需要一个ElementAt(#),那很好。但是这个对象似乎在它“看到”它的孩子之间存在冲突。
XElement xel = new XElement(
new XElement("root",
new XElement("level1"),
new XElement("level1"),
new XElement("level1",
new XElement("level2.1"),
new XElement("level2.2",
new XElement("level2.2.1"))),
new XElement("level1")
));
var q1 = from x in xel.Descendants()
select x;
var q2 = from x in xel.DescendantsAndSelf()
select x;
var q3 = from x in xel.Elements()
select x;
foreach (XElement x in q3.Elements())
{
string s = x.ToString();
}
答案 0 :(得分:1)
对于您发布的XML,root.Elements()
和root.Elements("level1")
之间没有区别:两者都返回相同的3个<level1>
元素。
通常,XElement.Elements()
完全符合您的要求:只返回元素的直接子元素。