Прочитайте в файле HTML и замените переменными - PullRequest
4 голосов
/ 17 февраля 2012

У меня есть HTML-файл, который будет служить шаблоном для электронного письма, которое я собираюсь отправить.В html есть поля, которые являются переменными.Мне было интересно, есть ли надежный способ заменить заполнители в файле HTML переменными.Я знаю, что мог бы натянуть строки. Заменить их все, но это не идеально, так как у меня много переменных.Вот как выглядит HTML-файл

<html>
<head>
<title></title>
</head>
<body>
<div>
    Please read the Cruise Control Details Below<br>
    <br>
    <table width='100%'>
        <tr>
            <td width='100%' colspan='5'>
                <font size='4'><b>Release Details</b></font>
            </td>
        </tr>
        <tr>
            <td width='20%'>
                <b>RFC Ticket #</b>
            </td>
            <td>
                %release.RFCTicket%
            </td>
            <td>
                &nbsp;
            </td>
            <td>
                &nbsp;
            </td>
            <td width='10%'>
                &nbsp;
            </td>
            <td width='20%'>
                <b>Project / Release Name</b>
            </td>
            <td width='20%'>
                %release.ReleaseName%
            </td>
        </tr>
        <tr>
            <td width='20%'>
                <b>Release Date</b>
            </td>
            <td width='20%'>
                %release.ReleaseDateString%
            </td>
            <td>
                &nbsp;
            </td>
            <td>
                &nbsp;
            </td>
            <td width='10%'>
                &nbsp;
            </td>
            <td width='20%'>
                <b>Release Time</b>
            </td>
            <td width='20%'>
                %release.ReleaseTimeString%
            </td>
        </tr>
        <tr>
            <td width='20%'>
                <b>CAB Approval Status</b>
            </td>
            <td width='20%'>
                %release.CABApproval%
            </td>
        </tr>
        <tr>
            <td width='100%' colspan='5'>
                &nbsp;
            </td>
        </tr>
        <tr>
            <td width='100%' colspan='5'>
                <font size='4'><b>Contact Information:</b></font>
            </td>
        </tr>
        <tr>
            <td width='20%'>
                <b>Project / Team Lead</b>
            </td>
            <td width='20%'>
                %release.TeamLead%
            </td>
            <td width='10%'>
                &nbsp;
            </td>
            <td width='20%'>
                <b>On Call DSE</b>
            </td>
            <td width='20%'>
                %release.OnCallDSE%
            </td>
        </tr>
        <tr>
            <td width='20%'>
                <b>Phone</b>
            </td>
            <td width='20%'>
                %release.ContactInfo%
            </td>
            <td>
                &nbsp;
            </td>
            <td>
                &nbsp;
            </td>
            <td>
                &nbsp;
            </td>
            <td width='10%'>
                &nbsp;
            </td>
            <td width='20%'>
                <b>Phone</b>
            </td>
            <td width='20%'>
                %release.OnCallDSEContact%
            </td>
        </tr>
        <tr>
            <td>
                &nbsp;
            </td>
        </tr>
        <tr>
            <td width='100%' colspan='5'>
                <font size='4'><b>Migration Details:</b></font>
            </td>
        </tr>
        <tr>
            <td width='20%'>
                <b>Deploy Dashboard</b>
            </td>
            <td width='20%'>
                &nbsp;
            </td>
            <td width='10%'>
                &nbsp;
            </td>
            <td width='20%'>
                <td>
                    &nbsp;
                </td>
                <td>
                    &nbsp;
                </td>
                <b>Deploy Task</b>
            </td>
            <td width='20%'>
                &nbsp;
            </td>
        </tr>
        %createTaskTable(ParseSpecialInstuctions().Split('|'))%</table>
</div>

Я хотел бы заменить значения между "%%" на переменную в коде, который их представляет.Я мог бы легко

string.Replace("%release.RFCTicket%",release.RFCTicket);

Но это немного запутанно, на мой взгляд, так как у меня около 10 переменных в файле.Есть ли встроенные методы, которые делают то, что я спрашиваю?Любая помощь будет оценена, спасибо!

Ответы [ 4 ]

4 голосов
/ 17 февраля 2012

Используйте регулярное выражение, чтобы найти свои совпадения. Я полагаю, что подходящее регулярное выражение будет иметь вид:

%release.\S+%

Оттуда вы можете просматривать каждое совпадение и анализировать имя участника по совпадению. Оттуда вы можете получить значение элемента из вашего экземпляра (в данном случае - release) с помощью отражения и выполнить замену строки.

Как то так. Он может использовать некоторый рефакторинг для устранения избыточных вызовов, и я не знаю, работает ли он полностью, но вы поняли ...

var regex = new Regex("%release.\S+%");
var match = r.Match(htmlText);
while (match.Success) 
{   
    var value = match.Value;
    var memberName = ParseMemberName(value); //Some code you write to parse out the member name from the match value
    var propertyInfo = release.GetType().GetProperty(memberName);
    var memberValue = propertyInfo.GetValue(release, null);
    htmlText = htmlText.Replace(value, memberValue != null ? memberValue.ToString() : string.Empty);
    match = match.NextMatch();
}
0 голосов
/ 17 февраля 2012

Вы можете использовать порт Apache Velocity Engine для .Net для создания шаблонов для вас

http://velocity.apache.org/engine/

http://velocity.apache.org/engine/devel/user-guide.html

http://nvelocity.sourceforge.net/

0 голосов
/ 17 февраля 2012

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

Затем вы заполняете свои данные списком или датируемыми данными и делаете 1 единственный цикл для всей замены.

проверьте их на помощь:

http://msdn.microsoft.com/en-us/library/twcw2f1c.aspx

http://www.regular -expressions.info / examples.html (точный случай упоминается в разделе «Захват HTML-тегов»)

0 голосов
/ 17 февраля 2012

Это специально изготовленный Probel для предварительно обработанного t4 шаблона

Вы можете предварительно отформатировать свою помощь в шаблоне и разрешить процессору замены сделать замену.Небольшой пример ниже.

<div>
    Please read the Cruise Control Details Below<br>
    <br>
    <table width='100%'>
        <tr>
            <td width='100%' colspan='5'>
                <font size='4'><b>Release Details</b></font>
            </td>
        </tr>
        <tr>
            <td width='20%'>
                <b>RFC Ticket #</b>
            </td>
        <td>
            <#= RCFTicketVariable #>
        </td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...