Что такое хороший способ сделать строковую шаблонную обработку в.NET?

Проблема в том, что вы закрываете свою функцию точкой с запятой.

Вместо этого поставьте открывающую скобку

function myFunction(){
        var text_input=document.getElementById("input001").value;
        if (text_input=="4"){
            document.getElementById("message001").innerText="Correct!";
            }
        else{
            document.getElementById("message001").innerText="nope";
            }
     }
47
задан Simon 9 April 2009 в 08:49
поделиться

8 ответов

Использовать шаблонизатор. StringTemplate является одним из них, и их много.

22
ответ дан Anton Gogolev 26 November 2019 в 19:22
поделиться

В блоге Фила Хаака об этом есть хорошая история с реализацией в блоге Фила Хаака: http: // haacked .com / Архив / 2009/01/14 / именованные-форматы-redux.aspx

4
ответ дан Dave Cluderay 4 August 2019 в 10:42
поделиться

Вы можете использовать метод "string.Format" :

var user = GetUser();
var finishTime = GetFinishTime();
var fileUrl = GetFileUrl();
var signature = GetSignature();
string msg =
@"Dear {0},

Your job finished at {1} and your file is available for download at {2}.

Regards,

--
{3}";
msg = string.Format(msg, user, finishTime, fileUrl, signature);

Позволяет менять контент в будущем и удобен для локализации.

17
ответ дан Peter Mortensen 26 November 2019 в 19:22
поделиться

Вы можете использовать string.Replace (...), в конце концов, в for-each через все ключевые слова. Если есть только несколько ключевых слов, вы можете поместить их в строку, подобную этой:

string myString = template.Replace("FirstName", "John").Replace("LastName", "Smith").Replace("FinishTime", DateTime.Now.ToShortDateString());

Или вы можете использовать Regex.Replace (...), если вам нужно что-то более мощное и с большим количеством опций.

Читать эта статья о codeproject , чтобы увидеть, какой вариант замены строки является самым быстрым для вас.

10
ответ дан Ovi 26 November 2019 в 19:22
поделиться

На самом деле, вы можете использовать XSLT. Вы создаете простой шаблон XML:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:template match="TETT">
    <p>
       Dear <xsl:variable name="USERNAME" select="XML_PATH" />,

       Your job finished at <xsl:variable name="FINISH_TIME" select="XML_PATH" /> and your file is available for download at <xsl:variable name="FILE_URL" select="XML_PATH" />.

       Regards,
        -- 
       <xsl:variable name="SIGNATURE" select="XML_PATH" />
    </p>
</xsl:template>

Затем создаете XmlDocument для выполнения преобразования: XmlDocument xmlDoc = new XmlDocument ();

        XmlNode xmlNode = xmlDoc .CreateNode(XmlNodeType.Element, "EMAIL", null);
        XmlElement xmlElement= xmlDoc.CreateElement("USERNAME");
        xmlElement.InnerXml = username;
        xmlNode .AppendChild(xmlElement); ///repeat the same thing for all the required fields

        xmlDoc.AppendChild(xmlNode);

После этого примените преобразование:

        XPathNavigator xPathNavigator = xmlDocument.DocumentElement.CreateNavigator();
        StringBuilder sb = new StringBuilder();
        StringWriter sw = new StringWriter(sb);
        XmlTextWriter xmlWriter = new XmlTextWriter(sw);
        your_xslt_transformation.Transform(xPathNavigator, null, xmlWriter);
        return sb.ToString();
5
ответ дан 0100110010101 26 November 2019 в 19:22
поделиться

Реализация собственного пользовательского форматера может быть хорошей идеей.

Вот как вы это делаете. Сначала создайте тип, который определяет материал, который вы хотите добавить в ваше сообщение. Примечание: я собираюсь проиллюстрировать это только пользовательской частью вашего шаблона ...

class JobDetails
{
    public string User 
    { 
        get;
        set; 
    }        
}

Далее, реализуем простой пользовательский форматировщик ...

class ExampleFormatter : IFormatProvider, ICustomFormatter
{
    public object GetFormat(Type formatType)
    {
        return this;
    }

    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        // make this more robust
        JobDetails job = (JobDetails)arg;

        switch (format)
        {
            case "User":
            {
                return job.User;
            }
            default:
            {
                // this should be replaced with logic to cover the other formats you need
                return String.Empty;
            }
        }
    }
}

Наконец, используйте его вот так ...

string template = "Dear {0:User}. Your job finished...";

JobDetails job = new JobDetails()
                     {
                             User = "Martin Peck"
                     };

string message = string.Format(new ExampleFormatter(), template, job);

.. ., который сгенерирует текст "Дорогой Мартин Пек. Ваша работа закончена ...".

4
ответ дан Martin Peck 26 November 2019 в 19:22
поделиться

Если вам нужно что-то очень мощное (, но на самом деле не самый простой способ ), вы можете разместить ASP .NET и используйте его в качестве движка шаблонов.

У вас будут все возможности ASP.NET для форматирования тела вашего сообщения.

1
ответ дан Peter Mortensen 26 November 2019 в 19:22
поделиться

Если вы кодируете в VB.NET, вы может использовать литералы XML. Если вы пишете код на C #, вы можете использовать ShartDevelop для создания файлов в VB.NET в том же проекте, что и код C #.

1
ответ дан 26 November 2019 в 19:22
поделиться
Другие вопросы по тегам:

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