Was ist eine gute Möglichkeit, String Templating in .NET zu tun?
Brauche ich zum senden von E-Mail-Benachrichtigungen an Benutzer und ich müssen zu erlauben, dass der admin eine Vorlage für den Nachrichtentext (und möglicherweise Header auch).
Ich würde gerne so etwas wie string.Format
mir erlaubt zu geben, benannte Ersatz-Saiten, so kann die Vorlage wie folgt Aussehen:
Dear {User},
Your job finished at {FinishTime} and your file is available for download at {FileURL}.
Regards,
--
{Signature}
Was ist der einfachste Weg für mich, das zu tun?
InformationsquelleAutor der Frage Simon | 2009-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendung einer Template-engine. StringTemplate ist einer von denen, und davon gibt es viele.
InformationsquelleAutor der Antwort Anton Gogolev
Hier ist die version für diejenigen, die kann verwenden Sie eine neue version von C#:
In einer Linie - das ist jetzt eine vollständig unterstützte Sprache-Funktion (string-interpolation).
InformationsquelleAutor der Antwort Benjamin Gruenbaum
SmartFormat ist eine ziemlich einfache Bibliothek, die alle Ihre Anforderungen erfüllt. Es konzentriert sich auf die Komposition "Natürliche Sprache" - text, und eignet sich hervorragend für die Erzeugung von Daten aus Listen oder anwenden von bedingter Logik.
Die syntax ist sehr ähnlich zu
String.Format
und ist sehr einfach und leicht zu erlernen und zu verwenden. Hier ist ein Beispiel die syntax aus der Dokumentation:Die Bibliothek hat große Fehler-handling-Optionen (Fehler ignorieren, Fehler bei der Ausgabe, Fehler auslösen). Offensichtlich wäre diese Arbeit perfekt für dein Beispiel.
Die Bibliothek ist open source und einfach erweiterbar, so können Sie auch erweitern Sie mit zusätzlichen Funktionen zu.
InformationsquelleAutor der Antwort Scott Rippey
Können Sie mit der "string.Format" - Methode:
Es erlaubt die änderung der Inhalte in der Zukunft und ist freundlich zur Lokalisierung.
InformationsquelleAutor der Antwort TcKs
Könnte man die Verwendung von string.Ersetzen(...), die schließlich in ein for-each über alle keywords. Wenn es nur ein paar keywords, die Sie haben, können Sie auf eine Zeile wie diese:
Oder verwenden Sie die Regex.Ersetzen(...), wenn Sie etwas brauchen, ein bisschen stärker und mit mehr Optionen.
Lesen Sie diese Artikel auf codeproject um zu sehen, welche string-Ersatz-option ist am schnellsten für Sie.
InformationsquelleAutor der Antwort Ovi
Tatsächlich ist, können Sie mithilfe von XSLT.
Erstellen Sie eine einfache XML-Vorlage:
Dann erstellen Sie ein XmlDocument-durchführen der transformation vor:
XmlDocument xmlDoc = new XmlDocument();
Danach wenden Sie die transformation:
InformationsquelleAutor der Antwort 0100110010101
Umsetzung Ihrer eigenen benutzerdefinierten Formatierer könnte eine gute Idee sein.
Hier ist, wie Sie es tun. Erstellen Sie zuerst ein Typ definiert, dass die Sachen, die Sie wollen zu injizieren in Ihre Nachricht. Hinweis: ich bin nur gehen, um dies zu illustrieren, mit der Benutzer Teil Ihrer Vorlage...
Als Nächstes implementieren Sie eine einfache benutzerdefinierte formatter -...
Schließlich, es so zu benutzen...
... die generieren den text "Lieber Martin Peck. Ihre Arbeit fertig...".
InformationsquelleAutor der Antwort Martin Peck
Gibt es einige nette Hintergrundinformationen, die mit einer Umsetzung, Phil Haack blog: http://haacked.com/archive/2009/01/14/named-formats-redux.aspx
InformationsquelleAutor der Antwort Dave Cluderay
Gebäude auf Benjamin Gruenbaum Antwort, in der C# - version 6 können Sie fügen Sie ein @ und$, und ziemlich viel mit Ihrem code, wie es ist, z.B.:
InformationsquelleAutor der Antwort mrrrk
Eine sehr einfache regex-basierte Lösung. Unterstützt
\n
-style single character-escape-Sequenzen und{Name}
-Stil mit dem Namen der Variablen.Quelle
Nutzung
Notes
\n
\r
\\
und\{
escape-Sequenzen und hart-codiert. Sie könnte leicht fügen Sie mehr oder machen Sie definierbar durch den Verbraucher.RegexOptions.IgnoreCase
Flagge.Match.Value
statt der leeren Zeichenfolge am Ende derRegex.Replace
Rückruf. Sie könnte auch eine Ausnahme werfen.{var}
syntax, aber dies kann zu Konflikten mit der einheimischen interpoliert string-syntax. Wenn Sie möchten, um Vorlagen in string-Literale im code, es könnte sinnvoll sein, ändern Sie die variable Trennzeichen sind z.B.%var%
(regex\\.|%([a-z0-9_.\-]+)%
) oder eine andere syntax Ihrer Wahl, welches ist besser geeignet, um die use-case.InformationsquelleAutor der Antwort DaveRandom
Wenn Sie etwas sehr mächtig (aber wirklich nicht der einfachste Weg) können Sie hosten ASP.NET und verwenden Sie es als Template-engine.
Haben Sie alle die Kraft ASP.NET formatieren Sie den Textkörper der Nachricht.
InformationsquelleAutor der Antwort thinkbeforecoding
Wenn Sie Codierung in VB.NET Sie können XML-Literale. Wenn Sie die Programmierung in C# können Sie ShartDevelop Dateien in VB.NET im selben Projekt C# - code.
InformationsquelleAutor der Antwort epitka