C# 如何在不知道其名称的情况下读取特定XmlNode

C# 如何在不知道其名称的情况下读取特定XmlNode,c#,text,xmlreader,xmlnode,C#,Text,Xmlreader,Xmlnode,找不到具体的答案 下面是一个解决我的问题的Xml示例 <Rectangle> <elementcolor>blue</elementcolor> <elementwidth>200</elementwidth> </Rectangle> <Line> <elementcolor>red</elementcolor> <elementwidth>1

找不到具体的答案

下面是一个解决我的问题的Xml示例

<Rectangle>
    <elementcolor>blue</elementcolor>
    <elementwidth>200</elementwidth>
</Rectangle>
<Line>
    <elementcolor>red</elementcolor>
    <elementwidth>150</elementwidth>
</Line>
这将返回我所有的Xml节点,但我只希望那些有一个节点作为ChildNode的节点,我如何才能做到这一点


提前感谢

不要使用
XmlTextReader
。使用新的LINQ到XML API:

XDocument document = XDocument.Load(file);
List<XElement> elementsWithChildren = document.Descendants()
                                              .Where(x => x.Elements().Any());
XDocument document=XDocument.Load(文件);
List elementsWithChildren=document.subscriptions()
其中(x=>x.Elements().Any());

您可以使用linq2xml来实现

var xml = @"<wrapper>
<Rectangle>
    <elementcolor>blue</elementcolor>
    <elementwidth>200</elementwidth>
</Rectangle>
<Rectangle/>
<Line/>
<Line>
    <elementcolor>red</elementcolor>
    <elementwidth>150</elementwidth>
</Line>
</wrapper>";

var elements = XElement
    .Parse(xml)
    .Descendants()
    .Where(o => o.HasElements);
elements.Dump();
var xml=@”
蓝色
200
红色
150
";
变量元素=XElement
.Parse(xml)
.后代()
其中(o=>o.has元素);
元素Dump();
输出

<Rectangle>
  <elementcolor>blue</elementcolor>
  <elementwidth>200</elementwidth>
</Rectangle> 
<Line>
  <elementcolor>red</elementcolor>
  <elementwidth>150</elementwidth>
</Line> 

蓝色
200
红色
150

以前从未听说过Linq,只是在我的项目中添加了System.Xml.Linq引用。但是.where查询没有被重新确认,是不是我遗漏了什么?@Rafael您还需要添加一个带有System.Linq的using语句。以前从未听说过Linq,只是在我的项目中添加了System.Xml.Linq引用。但是,在没有重新确认查询的地方,是不是我遗漏了什么?很可能需要添加一个使用系统;以及System.Xml.Linq;elements.Dump()是一个LinqPad。我一直用它来做调查工作。确保您在项目中引用的是System.Core.dll添加的System.Linq和.where仍然不可重新识别
<Rectangle>
  <elementcolor>blue</elementcolor>
  <elementwidth>200</elementwidth>
</Rectangle> 
<Line>
  <elementcolor>red</elementcolor>
  <elementwidth>150</elementwidth>
</Line>