我有一个要求,即电子邮件正文应包含文本框输入的值。我已经在xml格式的电子邮件正文中预定义了内容,但是文本框中输入的值应附加到xml&使用此输入值,整个电子邮件正文应显示在占位符中。
<?xml version="1.0" encoding="UTF-8"?>
<EMAIL>
<ADDR To="abcd@abcd.com" Sub="Email body"></ADDR>
<BODY>Data available at <br />**url<br /><br />Thanks</BODY>
</EMAIL>
在C#中,
public void EmailDefaultValue(string url)
{
XElement xmlMap = XElement.Load(HttpContext.Current.Server.MapPath("~/Config Files/EmailBody.xml"));
txtToEmail.Value = (from item in xmlMap.Elements("ADDR")
select item.Attribute("To").Value).Single();
txtSubject.Value = (from item in xmlMap.Elements("ADDR")
select item.Attribute("Sub").Value).Single();
txtEmailBody.Text =string.Format((from item in xmlMap.Elements("BODY")
select item.Value).Single(),url);
}
输出中的:
显示文本**url
而不是读取url
变量值并附加。
我在哪里错过了什么?
答案 0 :(得分:0)
需要由String.Format()
替换的字符串部分必须采用特定格式,例如{0}
。将XML模板中的**url
替换为{0}
:
<BODY>Data available at <br />{0}<br /><br />Thanks</BODY>
然后你当前的代码应该工作。快速测试:https://dotnetfiddle.net/U5LHep
答案 1 :(得分:0)
尝试下面的一个。
[XmlRoot]
public class EMAIL
{
[XmlElement("ADDR")]
public ADDR ADDR { get; set; }
[XmlElement("BODY")]
public string BODY { get; set; }
}
public class ADDR
{
[XmlAttribute("To")]
public string To { get; set; }
[XmlAttribute("Sub")]
public string Sub { get; set; }
}
static void Main(string[] args)
{
var fileName = @"your xml file here";
var xmlResult = System.IO.File.ReadAllText(fileName);
XmlSerializer serializer = new XmlSerializer(typeof(EMAIL));
using (TextReader reader = new StringReader(xmlResult))
{
EMAIL result = (EMAIL)serializer.Deserialize(reader);
Console.WriteLine(result.ADDR.Sub);
Console.WriteLine(result.ADDR.To);
Console.WriteLine(result.BODY);
}
Console.Read();
}
你的输出