Wpf 帮助在.NET中对XML数据进行排序(可能使用LINQ查询?)
我有这种XML层次结构Wpf 帮助在.NET中对XML数据进行排序(可能使用LINQ查询?),wpf,xml,vb.net,linq,sorting,Wpf,Xml,Vb.net,Linq,Sorting,我有这种XML层次结构 <Chapters> <Chapter @num=""> <Section @letter=""> <Heading @num="" /> </Section> </Chapter> </Chapters> 从那里我迷路了。我尝试了这件疯狂的事情以获得我想要的全部结果,但这对我也没有任何好处: Dim chapsorted = From
<Chapters>
<Chapter @num="">
<Section @letter="">
<Heading @num="" />
</Section>
</Chapter>
</Chapters>
从那里我迷路了。我尝试了这件疯狂的事情以获得我想要的全部结果,但这对我也没有任何好处:
Dim chapsorted = From c In root.Elements
Order By c.@num Ascending
Select (From sec In c.Elements Order By sec.@letter Where sec.Parent Is c Select
(From hed In sec.Elements Order By hed.@num Where hed.Parent Is sec)))
那对我也没有好处
必须有一个简单的方法来做到这一点……:-)非常感谢您的帮助,我已经转了好几个小时了。我认为您的第一个问题是正确的。通过从原始的
XElement
复制名称和属性,从已排序节点的结果列表中构建XElement
,然后嵌套该结构:
Dim chapsorted = New XElement(root.Name, _
root.Attributes, _
From c In root.Elements _
Order By c.@num Ascending _
Select New XElement(c.Name, _
c.Attributes, _
From s In c.Elements _
Order By s.@letter Ascending _
Select New XElement(s.Name, _
s.Attributes, _
From h In s.Elements _
Order By h.@num Ascending _
Select h)))
如果在每一级都按同一属性排序,则可以执行如下递归解决方案:
Private Function SortChildElements(ByVal element As XElement) As XElement
Return New XElement( _
element.Name, _
element.Attributes, _
element.Nodes.Where(Function(node) Not TypeOf node Is XElement), _
From child In element.Elements _
Order By child.@num Ascending _
Select SortChildElements(child))
End Function
Private Function SortChildElements(ByVal element As XElement) As XElement
Return New XElement( _
element.Name, _
element.Attributes, _
element.Nodes.Where(Function(node) Not TypeOf node Is XElement), _
From child In element.Elements _
Order By child.@num Ascending _
Select SortChildElements(child))
End Function