0

找不到具体的答案

这是我的问题的 Xml 示例

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

我想得到所有有 ChildNodes 的元素,我不想得到那些有简单文本的元素

我想放入一个列表,在这个例子中,矩形和线。

但是,当向那些包含简单文本的节点询问 .HasChildNodes 时,它们会返回 True,并且作为 ChildNode[0].Name,它们会返回“#text”。

我不能简单地询问.HasChildNodes,而且我找不到其他方法来指定哪个节点有一个节点作为 ChildNode,哪个节点有一个“#text”

所以我尝试使用 XmlReader,这样:

XmlTextReader reader = new XmlTextReader(file);
while (reader.Read())
{
    if (reader.NodeType == XmlNodeType.Element)
    {
        list.Add(reader.Name);   
    }
}

这将返回所有 Xml 节点,但我只想要那些将节点作为 ChildNode 的节点,我该怎么做?

提前致谢

4

2 回答 2

0

不要使用XmlTextReader. 使用新的 LINQ to XML API:

XDocument document = XDocument.Load(file);
List<XElement> elementsWithChildren = document.Descendants()
                                              .Where(x => x.Elements().Any());
于 2013-07-02T20:54:48.953 回答
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> 
于 2013-07-02T21:06:40.637 回答