Условный литерал XML

Я имею мнение, что ни из чего не нужно выходить во время входа, только на выводе. Так как (большую часть времени) Вы не можете предположить, что знаете, куда те данные идут. Пример, если у Вас есть форма, которая берет данные, которые позже появляются в электронном письме, которое Вы отсылаете, Вам нужен различный выход (иначе, злонамеренный пользователь мог переписать Ваши почтовые заголовки).

, Другими словами, можно только выйти в самый последний момент, данные "оставляют" приложение:

  • элемент списка
  • Запись к XML-файлу, Escape для Записи XML
  • к DB, Escape (для того конкретного DBMS)
  • Пишет электронное письмо, Escape для электронных писем
  • и т.д.

Для движения короткий:

  1. Вы не знаете, куда Ваши данные идут
  2. , Данные могли бы на самом деле оказаться больше чем в одном месте, нуждаясь в различном механизме выхода, НО НЕ ОБА
  3. , Данные, которых оставляют для неправильной цели, действительно не хороши. (Например, доберитесь, электронное письмо с предметом "Переходят к панели \Tommy".)

особенно № 3 произойдет, если Вы выйдете из данных на входном слое (или Вам нужен к de-escape он снова, и т.д.).

пз: я буду второй совет для того, чтобы не использовать magic_quotes, те - чистое зло!

5
задан Todd Main 11 January 2010 в 07:46
поделиться

1 ответ

Вы можете просто поместить оператор 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>
13
ответ дан 18 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: