2009-11-13 1 views
4

나는 이것에 대한 검색을 시도했지만 아무데도 대답을 찾을 수없는 것 같아 여기 누군가 도움을 줄 수 있기를 바랍니다. count가 1보다 큰지 여부에 따라 조건부 XML 태그를 삽입하려고하지만이를 수행하는 방법을 잘 모르겠습니다.조건부 XML 리터럴

<BigGroup> 
<Group/> 
</BigGroup> 

:이 첫 번째에 대한 끝나게 할

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

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

:

예를 들어,이 같은 두 XElements이 두 번째 경우 :

<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 리터럴 내에서이 작업을 수행 할 수있는 방법이 있습니까?

+0

그것은 "작동하지 않는"무엇을 의미합니까? 너 정확히 뭐하고있어? – Konamiman

+0

나는군요 :

답변

11

If 문을 XML 리터럴에 넣을 수 있습니다. 또한 <%= %> 변수를 참조하기 만하면 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> 
+0

WOW! 그게 바로 제가 찾고 있던 것입니다. 정말 고맙습니다! –