我已经尝试过搜索但似乎无法在任何地方找到答案,所以希望有人可以提供帮助。我想根据计数是否高于1来插入条件XML标记,但我不知道该怎么做。
例如,我有两个像这样的XElements:
<Blob>
<Group>
Stuff 1
</Group>
</Blob>
和
<Blob>
<Group>
Stuff 1
</Group>
<Group>
Stuff 2
</Group>
</Blob>
我希望这最终成为第一个:
<BigGroup>
<Group/>
</BigGroup>
和第二个:
<BigGroup>
<Groups>
<Group/>
<Group/>
</Groups>
</BigGroup>
请注意,在第二个中,它们是围绕两个群体的标记。
所以,我想在XML Literal中使用这个条件。我试过的是:
Dim groups = If(<Blob>.<Group>.Count > 1, <Groups/>, Nothing)
Dim bigGroup = <BigGroup><%= groups %><%= from e in <Blob>.<Group> select e %><%= groups%></BigGroup>
但这不起作用。有没有人可以根据需要在XML Literal中执行此操作?
答案 0 :(得分: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
输出结果为:
<BigGroup>
<Group>Stuff 1</Group>
<BigGroup>
<BigGroup>
<Groups>
<Group>Stuff 1</Group>
<Group>Stuff 2</Group>
</Groups>
</BigGroup>