Преобразование XML в HTML с использованием XSLT - PullRequest
2 голосов
/ 11 марта 2011

Я видел несколько вопросов, связанных с XML, XSLT и HTML, в stackoverflow, но я считаю, что мой вопрос немного отличается.Вот что мне нужно:

Мне нужно отправить электронное письмо своим клиентам.Формулировки электронной почты могут отличаться в зависимости от сценария.Каждый сценарий имеет соответствующий формат, сохраненный в базе данных.Например, для одного сценария может потребоваться этот адрес электронной почты:

Сценарий 1: Мы открыли Билет XXX / Ссылочный номер XXX для вашего звонка в XXX.Пожалуйста, позвоните нам в XXX, чтобы отследить прогресс.

Этому письму может потребоваться другой сценарий:

Сценарий 2: Благодарим Вас за интерес к нашему продукту XXX.Как уже говорилось, мы отправим нашего представителя в XXX в ваш офис, расположенный по адресу XXX.

Кроме того, возможно, потребуется изменить формат в зависимости от наличия данных.например, если мне нужно отправить электронное письмо, соответствующее сценарию 1, и у меня нет справочного номера, я хочу полностью удалить часть справочного номера на лету (не в базе данных), т.е. я хочу что-то вроде этого:

Сценарий 3: Мы открыли Билет XXX для вашего звонка на XXX.Пожалуйста, позвоните нам в XXX для отслеживания прогресса.

Форматы для сценариев 1 и 2 хранятся в базе данных как XSLT, соответствующие строкам, которые вы видите выше.Формат для сценария 3 должен быть создан на лету.XXX часть должна быть заменена фактическими данными.Эти данные доступны в виде сериализуемого объекта XML, который у меня есть.

Я хочу сериализовать этот объект, создать XML в памяти, немного изменить (на лету) XSLT, чтобы отразить имеющиеся у меня данные, преобразовать XML в памяти в HTML, используя XSLT для сценария изатем передайте HTML как строковый параметр методу электронной почты, который у меня есть.Электронная часть работает.Мне нужно работать над Object-> XML в памяти-> Небольшая модификация XSLT-> HTML, используя соответствующий XSLT.

Буду признателен, если вы включите примеры кода, а не только подход, которому я должен следовать.

РЕДАКТИРОВАТЬ:

Вот рабочий код:

using (xsltStream = new MemoryStream(emailInfo.Body))
            {
                // Create an XmlReader from the Stream
                XmlReader reader = XmlReader.Create(xsltStream);

                // Create and load the transform with document function enabled.
                XslCompiledTransform transform = new XslCompiledTransform();
                XsltSettings settings = new XsltSettings();
                settings.EnableDocumentFunction = true;
                transform.Load(reader, settings, null);

                // Execute the transformation.
                transform.Transform(doc, writer);
             }

Ответы [ 2 ]

0 голосов
/ 27 июня 2012

Основываясь на комментариях @harpo, @Aleei Levenkov и @Alejandro, я смог разработать рабочую версию кода, которая использует несколько шаблонов. Поскольку я не могу пометить комментарии как ответы, я отмечу это как ответ и добавлю код в свой вопрос.

using (xsltStream = new MemoryStream(emailInfo.Body))
            {
                // Create an XmlReader from the Stream
                XmlReader reader = XmlReader.Create(xsltStream);

                // Create and load the transform with document function enabled.
                XslCompiledTransform transform = new XslCompiledTransform();
                XsltSettings settings = new XsltSettings();
                settings.EnableDocumentFunction = true;
                transform.Load(reader, settings, null);

                // Execute the transformation.
                transform.Transform(doc, writer);
             }
0 голосов
/ 11 марта 2011

Форматы для сценариев 1 и 2 хранятся в базе данных как XSLT

Я думаю, что я был бы весьма склонен хранить форматы как XML, а не как XSLT:

<message>Thanks for your interest in our Product <product/>. As discussed we will send our representative on <date/> to your office located at <officeLocation/>.</message>

Затем вы используете стандартную таблицу стилей для преобразования этого документа, используя данные из другого документа.

Сказав это, я рекомендую это только потому, что я сделал это сам, как вы описываете и сожалеете об этом, поскольку слишком сложно вносить изменения или вводить новые варианты.

...