2010-09-10 63 views
1

我试图使用Linq XML来选择一些节点和孩子,但越来越可怕的困惑!C#Linq XML从文档中提取节点

在下面的示例XML中,我需要提取所有<MostWanted>以及所有通过它们的子节点,但没有其他节点位于Mostwanted和Wanted节点之间。

这是因为每个MostWanted可以跟随任何数量的Wanted和Wanted与前面的Mostwanted相关。

我甚至混淆了自己输入这个!

如何在C#中执行此操作?

<root> 
    <top> 
    <NotWanted3> 
    </NotWanted3> 
    <MostWanted> 
     <UniqueKey>1</UniqueKey> 
     <QuoteNum>1</QuoteNum> 
    </MostWanted> 
    <NotWanted2> 
     <UniqueKey>1</UniqueKey> 
     <QuoteNum>1</QuoteNum> 
    </NotWanted2> 
    <NotWanted1> 
     <UniqueKey>0001</UniqueKey> 
    </NotWanted1> 
    <Wanted> 
     <Seg> 
     <SegNum>1</SegNum> 
     </Seg> 
    </Wanted> 
    <Wanted> 
     <Seg> 
     <SegNum>2</SegNum> 
     </Seg> 
    </Wanted> 
    <NotWanted> 
     <V>x</V> 
    </NotWanted> 
    <NotWanted3> 
    </NotWanted3> 
    <MostWanted> 
     <UniqueKey>1</UniqueKey> 
     <QuoteNum>1</QuoteNum> 
    </MostWanted> 
    <NotWanted2> 
     <UniqueKey>1</UniqueKey> 
     <QuoteNum>1</QuoteNum> 
    </NotWanted2> 
    <NotWanted1> 
     <UniqueKey>0002</UniqueKey> 
    </NotWanted1> 
    <Wanted> 
     <Seg> 
     <SegNum>3</SegNum> 
     </Seg> 
    </Wanted> 
    <Wanted> 
     <Seg> 
     <SegNum>4</SegNum> 
     </Seg> 
    </Wanted> 
    <NotWanted> 
     <V>x</V> 
    </NotWanted> 
    </top> 
</root> 

回答

1

你为什么不只是使用:

XName wanted = "Wanted"; 
XName mostWanted = "MostWanted"; 
var nodes = doc.Descendants() 
       .Where(x => x.Name == wanted || x.Name == mostWanted); 

这将检索每一个所谓的 “通缉犯” 或 “MostWanted” 元素。从这些元素中的每一个,你可以得到的子元素等

如果这不是你所追求的,请澄清你的问题。

+0

谢谢乔恩,这真是太棒了! – Adrian 2010-09-10 16:44:45

+0

我是新来的,因为我相信你可以告诉! – Adrian 2010-09-10 16:45:58

+0

你能解释它如何工作“=>”? – Adrian 2010-09-10 16:46:28