Условный XML-литерал
Я пытался найти это, но, похоже, нигде не нашел ответа, так что, надеюсь, кто-то здесь может помочь. Я хочу вставить условный тег XML в зависимости от того, является ли счет выше единицы, но я не уверен, как это сделать.
Например, у меня есть два XElement, которые похожи на это:
<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, как требуется выше?
1 ответ
Вы можете просто разместить оператор 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>