Tod*_*ain 5 vb.net linq-to-xml xml-literals
我试过这个搜索但似乎无法在任何地方找到答案,所以希望有人在这里可以提供帮助.我想根据计数是否高于1来插入条件XML标记,但我不知道该怎么做.
例如,我有两个像这样的XElements:
<Blob>
<Group>
Stuff 1
</Group>
</Blob>
Run Code Online (Sandbox Code Playgroud)
和
<Blob>
<Group>
Stuff 1
</Group>
<Group>
Stuff 2
</Group>
</Blob>
Run Code Online (Sandbox Code Playgroud)
我希望这最终成为第一个:
<BigGroup>
<Group/>
</BigGroup>
Run Code Online (Sandbox Code Playgroud)
而对于第二个:
<BigGroup>
<Groups>
<Group/>
<Group/>
</Groups>
</BigGroup>
Run Code Online (Sandbox Code Playgroud)
请注意,在第二个中,它们是围绕两个组的标记.
所以,我想在XML Literal中使用这个条件.我试过的是:
Dim groups = If(<Blob>.<Group>.Count > 1, <Groups/>, Nothing)
Dim bigGroup = <BigGroup><%= groups %><%= from e in <Blob>.<Group> select e %><%= groups%></BigGroup>
Run Code Online (Sandbox Code Playgroud)
但这不起作用.有没有人有办法在XML Literal中按上述方法执行此操作?
Cod*_*nis 13
您可以将If语句放在XML Literal中.此外,IEnumerable(Of XElement)通过简单地引用内部变量来输出一个足够聪明<%= %>.
这是代码.
Sub Main()
Dim SingleGroup = <Blob>
<Group>Stuff 1</Group>
</Blob>
Dim TwoGroups = <Blob>
<Group>Stuff 1</Group>
<Group>Stuff 2</Group>
</Blob>
Dim BigGroup1 = BigGroup(SingleGroup.<Group>)
Dim BigGroup2 = BigGroup(TwoGroups.<Group>)
Console.WriteLine(BigGroup1)
Console.WriteLine()
Console.WriteLine(BigGroup2)
Console.ReadLine()
End Sub
Function BigGroup(ByVal groups As IEnumerable(Of XElement)) As XElement
Dim result = <BigGroup>
<%= If(groups.Count > 1, _
<Groups><%= groups %></Groups>, _
groups.SingleOrDefault) %>
</BigGroup>
Return result
End Function
Run Code Online (Sandbox Code Playgroud)
输出是:
<BigGroup>
<Group>Stuff 1</Group>
<BigGroup>
<BigGroup>
<Groups>
<Group>Stuff 1</Group>
<Group>Stuff 2</Group>
</Groups>
</BigGroup>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |