5

これを検索してみましたが、どこにも答えが見つからないようですので、ここの誰かが助けてくれることを願っています. カウントが 1 より大きいかどうかに基づいて条件付き XML タグを挿入したいのですが、その方法がわかりません。

たとえば、次のような 2 つの XElements があります。

<Blob>
<Group>
Stuff 1
</Group>
</Blob>

<Blob>
<Group>
Stuff 1
</Group>
<Group>
Stuff 2
</Group>
</Blob>

私はこれが最初のものになることを望みます:

<BigGroup>
<Group/>
</BigGroup>

そして2番目のもの:

<BigGroup>
<Groups>
<Group/>
<Group/>
</Groups>
</BigGroup>

2 番目の例では、their が 2 つのグループを囲むタグになっていることに注意してください。

そのため、XML リテラルでその条件が必要です。私が試したことは次のとおりです。

Dim groups = If(<Blob>.<Group>.Count > 1, <Groups/>, Nothing)

Dim bigGroup = <BigGroup><%= groups %><%= from e in <Blob>.<Group> select e %><%= groups%></BigGroup>

しかし、それは機能していません。上記のように、XMLリテラル内からこれを行う方法はありますか?

4

1 に答える 1

13

XML リテラル内に If ステートメントを配置するだけです。IEnumerable(Of XElement)また、内の変数を参照するだけで an を出力するのもスマート<%= %>です。

これがコードです。

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>
于 2009-11-14T07:52:31.777 に答える