Это эксклюзивная функция VB.NET, известная как XML-литералы. Он был добавлен в VB 9.0. C # в настоящее время не поддерживает эту функцию. Хотя Microsoft заявила о своем намерении преодолеть разрыв между языками в будущем, неясно, появится ли эта функция в C # в ближайшее время.
Мне твой пример не понятен. Вы хотели бы иметь цикл foreach
перед синтаксическим анализом фактического XML, поскольку значения привязаны к текущему объекту Person
. Например, вот пример XML-литералов на языке VB:
Dim xml = <numbers>
<%= From i In Enumerable.Range(1, 5)
Select <number><%= i %></number>
%>
</numbers>
For Each e In xml.Elements()
Console.WriteLine(e.Value)
Next
Приведенный выше фрагмент строит следующий XML:
<numbers>
<number>1</number>
<number>2</number>
<number>3</number>
</numbers>
Потом пишет 1, 2, 3
в консоль.
Если вы не можете изменить свой код C # для динамического построения XML, возможно, вы могли бы написать код, который просматривает шаблон XML и выполняет поиск заранее определенных полей в атрибутах и элементах, а затем устанавливает значения по мере необходимости. Это означает, что вам придется перебирать все атрибуты и элементы в каждом узле и иметь некоторый оператор switch, который проверяет имя поля шаблона. Если вы встретите поле шаблона и в настоящее время выполняете итерацию атрибутов, вы должны установить его так, как устанавливаются атрибуты, тогда как если бы вы выполняли итерацию элементов, вы бы установили его так, как устанавливаются элементы. Это, вероятно, не самый эффективный подход, но это одно из решений.
Самым простым решением было бы использовать VB.NET. Вы всегда можете разработать его как отдельный проект, добавить ссылку на dll из проекта C #, передать данные в класс VB.NET и получить окончательный XML-код.
РЕДАКТИРОВАТЬ: чтобы уточнить, использование VB.NET не отменяет необходимости обновления шаблона. Это позволяет вам проще указать макет в виде XML-литерала. Таким образом, код в VB по-прежнему необходимо обновлять после изменения макета. Вы не можете загрузить шаблон XML из текстового файла и ожидать, что поля будут привязаны таким образом. Для действительно динамического решения, которое позволяет вам написать код один раз и прочитать разные шаблоны, мое первое предложение более уместно.
person
Ahmad Mageed
schedule
03.10.2010