感觉有点不对劲。 但也许它并不是...使用StringBuilder编写XML是否可以?我的直觉告诉我:"虽然这样做感觉不对,但它可能非常高效,因为它不会加载额外的库和开销它没有进行XmlWriter调用所需的任何额外方法调用。"总的来说,使用 StringBuilder 似乎代码更少。在使用 XmlWriter 上的好处是什么呢?
这是它的实际样子。 我正在基于您输入的域构建OpenSearch XML文档。
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/xml";
string domain = WebUtils.ReturnParsedSourceUrl(null); //returns something like www.sample.com
string cachedChan = context.Cache[domain + "_opensearchdescription"] as String;
if (cachedChan == null)
{
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
sb.Append("<OpenSearchDescription xmlns=\"http://a9.com/-/spec/opensearch/1.1/\" xmlns:moz=\"http://www.mozilla.org/2006/browser/search/\">");
sb.Append(" <ShortName>Search</ShortName>");
sb.Append(" <Description>Use " + domain + " to search.</Description>");
sb.Append(" <Contact>contact@sample.com</Contact>");
sb.Append(" <Url type=\"text/html\" method=\"get\" template=\"http://" + domain + "/Search.aspx?q={searchTerms}\" />");
sb.Append(" <moz:SearchForm>http://" + domain + "/Search.aspx</moz:SearchForm>");
sb.Append(" <Image height=\"16\" width=\"16\" type=\"image/x-icon\">http://" + domain + "/favicon.ico</Image>");
sb.Append("</OpenSearchDescription>");
cachedChan = sb.ToString();
context.Cache.Insert(domain + "_opensearchdescription", cachedChan, null, DateTime.Now.AddDays(14), TimeSpan.Zero);
}
context.Response.Write(cachedChan);
}
后续,两年后 我意识到我本想表达的是什么,但却完全没有说清楚:使用XML类生成此文件的大量代码与仅使用字符串有何益处?有吗?这比(例如)John Saunder的示例更糟糕吗?
我采用了Jim Schubert的方法,选择“我可以阅读并理解”而不是争取“正确性”。我很高兴这样做了。John Saunder的示例没有错 - 但我觉得它对于我要完成的任务来说过于复杂了。实用主义?也许。