Luk*_*101 6 c# xml linq linq-to-xml
我需要在某些节点之前和之后移动兄弟节点.这是我正在使用的代码
<tabs>
<tab>
<name>Overview</name>
</tab>
<tab>
<name>Testing</name>
</tab>
<tab>
<name>Performance</name>
</tab>
<tab>
<name>Braking</name>
</tab>
</tabs>
Run Code Online (Sandbox Code Playgroud)
我想移动选项卡,在上面的概述中进行测试.我将如何使用linq to XML进行此操作?
抱歉,这是 VB.NET 和 XML Literals,但它可以用 C# 来完成。这里的想法是使用Reverse扩展方法:
Sub Main()
Dim tab = <tabs>
<tab>
<name>Overview</name>
</tab>
<tab>
<name>Testing</name>
</tab>
<tab>
<name>Performance</name>
</tab>
<tab>
<name>Braking</name>
</tab>
</tabs>
Console.WriteLine(SwapElements("Testing", "Performance", tab).ToString)
Console.ReadLine()
End Sub
Function SwapElements(ByVal firstElement As String, ByVal secondElement As String, ByVal tab As XElement) As XElement
Dim swapped = tab.Elements.Where(Function(e) e.Value = firstElement Or e.Value = secondElement).Reverse
Dim middle = tab.Elements.SelectMany(Function(e) e.ElementsAfterSelf.Where(Function(f) e.Value = firstElement).TakeWhile(Function(g) g.Value <> secondElement))
swapped.ElementAt(0).AddAfterSelf(middle)
Return <<%= tab.Name %>>
<%= tab.Elements.Select(Function(e) e.ElementsBeforeSelf.Where(Function(f) e.Value = firstElement)) %>
<%= swapped %>
<%= tab.Elements.Select(Function(e) e.ElementsAfterSelf.Where(Function(f) e.Value = secondElement)) %>
</>
End Function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2378 次 |
| 最近记录: |