ANTLR TemplateException был не обработан
Я использую возможности шаблона строки Antlr и вижу следующую ошибку:
Antlr4.StringTemplate.Compiler.TemplateException was unhandled
HResult=-2146233088
Message=Exception of type 'Antlr4.StringTemplate.Compiler.TemplateException' was thrown.
Source=Antlr4.StringTemplate
С кодом:
class Program
{
static void Main(string[] args)
{
var messageTemplate = "<table style=\'border-collapse: collapse; width: 100%\' dir=\'ltr\' cellspacing=\'0\'><tr style=\'background-color: #f8f8f9; border: thin #e8eaec solid\'><td style=\'font-family: Verdana; font-size: 12pt; background-color: #f8f8f9; border: thin #e8eaec solid; padding: 20px 20px 20px 20px\'>New Order for Vendor: <strong style=\'font-family: Verdana; font-size: 12pt;\'>%VendorName%</strong></td></tr><tr><td></td></tr><tr style=\'background-color: #f8f8f9; border: thin #e8eaec solid\'><td style=\'font-family: Verdana; font-size: 12pt; background-color: #f8f8f9; border: thin #e8eaec solid; padding: 20px 20px 20px 20px\'><table><tr><td style=\'font-family: Verdana; font-size: 12pt;\'>Order Number: </td><td width=\'2px\'></td><td style=\'font-family: Verdana; font-size: 12pt;\'>%OrderNumber%</td></tr><tr><td style=\'font-family: Verdana; font-size: 12pt;\'>State: </td><td width=\'2px\'></td><td style=\'font-family: Verdana; font-size: 12pt;\'>%CustomerAddressState%</td></tr><tr><td style=\'font-family: Verdana; font-size: 12pt;\'>County:</td><td width=\'2px\'></td><td style=\'font-family: Verdana; font-size: 12pt;\'>%CustomerAddressCounty%</td></tr><tr><td style=\'font-family: Verdana; font-size: 12pt;\'>Municipality:</td><td width=\'2px\'></td><td style=\'font-family: Verdana; font-size: 12pt;\'>%VendorCity%</td></tr><tr><td style=\'font-family: Verdana; font-size: 12pt;\'>Borrower:</td><td width=\'2px\'></td><td style=\'font-family: Verdana; font-size: 12pt;\'>%Borrowers%</td></tr><tr><td style=\'font-family: Verdana; font-size: 12pt;\'>Product Family:</td><td width=\'2px\'></td><td style=\'font-family: Verdana; font-size: 12pt;\'>%ProductFamily%</td></tr><tr><td style=\'font-family: Verdana; font-size: 12pt;\'>Price:</td><td width=\'2px\'></td><td style=\'font-family: Verdana; font-size: 12pt;\'>%Price%</td></tr></table></td></tr><tr><td></td></tr><tr><td></td></tr><tr> <td style=\'font-family: Verdana; font-size: 12pt; padding: 20px 20px 20px 20px\'><img src=\'https://www.americantitleinc.com/ati/Portals/0/WebLogo_V1.png\' width=\'250\' height=\'95\' border=\'0\' alt=\'American Title <br>Service Without Boundaries\'/></td> </tr></table>";
var template = new Template(messageTemplate, '%', '%');
var attributes = new Dictionary<string, object>
{
{"VendorName", "Vendor"},
{"OrderNumber", "OrderNumber"},
{"CustomerAddressState", "CustomAddressState"},
{"CustomerAddressCounty", "CustomAddressCounty"},
{"VendorCity", "VendorCity"},
{"Borrowers", "Borrowers"},
{"ProductFamily", "ProductFamily"},
{"Price", 10.5d}
};
foreach (var key in attributes.Keys)
template.Add(key, attributes[key]);
var result = template.Render();
}
}
К сожалению, эта ошибка крайне неописательна.
1 ответ
Решение
Проблема здесь в том, что шаблон HTML, который содержит %
знак, который также является символом, который используется для разделителя. Жаль, что ошибка не указывает это более прямо.
Замена разделителя на ~
исправил проблему.