找不到该
的具体答案这是我的问题的Xml示例
<Rectangle>
<elementcolor>blue</elementcolor>
<elementwidth>200</elementwidth>
</Rectangle>
<Line>
<elementcolor>red</elementcolor>
<elementwidth>150</elementwidth>
</Line>
我想获得所有具有ChildNodes的元素,我不想让那些拥有简单文本的人
我想放入一个列表,在本例中为Rectangle和Line。
但是当问.HasChildNodes到那些包含简单文本的节点时,它们返回True和ChildNode [0] .Name,它们返回给我“#text”。
我不能简单地问.HasChildNodes,我找不到其他方法来指定哪个节点有一个Node作为ChildNode,哪一个有一个“#text”
所以我尝试使用XmlReader,这样:
XmlTextReader reader = new XmlTextReader(file);
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
list.Add(reader.Name);
}
}
这回复了我所有的Xml节点,但我只想让那些拥有Node作为ChildNode的人,我该怎么做?
提前致谢
答案 0 :(得分:0)
请勿使用XmlTextReader
。使用新的LINQ to XML API:
XDocument document = XDocument.Load(file);
List<XElement> elementsWithChildren = document.Descendants()
.Where(x => x.Elements().Any());
答案 1 :(得分:0)
您可以使用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();
<强>输出强>
<Rectangle>
<elementcolor>blue</elementcolor>
<elementwidth>200</elementwidth>
</Rectangle>
<Line>
<elementcolor>red</elementcolor>
<elementwidth>150</elementwidth>
</Line>