使用XLinq,您似乎必须知道元素的子元素的确切名称才能访问特定的子元素。我想访问/发现元素的直接子元素,但没有这种紧密耦合。只有XElement的子节点
如果我有:
<根>
<级别1/>
<级别1/>
<级别1 >
<level2.1>
<level2.2>
< level2.2.1/>
</level2.2>
</1级>
< 1级/ >
< /根>
在寻找 “根” 的孩子,root.Elements()COUNT()返回7 - 我想4( “1级” 节点)。如果我问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();
}
我想你没有发布你实际使用的XML:''只有4次。 –
svick
2011-05-29 18:34:11
您更新的XML无效,''未关闭。 –
svick
2011-05-29 18:39:11
序列'q3'确实只有4个元素。但是当你在带有子元素的元素上使用'ToString()'时,它会打印整个元素,包括子元素。如果你使用'ElementAt()',你会得到相同的行为。 – svick 2011-05-29 19:29:37