汚い感じです。しかし、そうではないかもしれません... XML の記述に StringBuilder を使用しても問題ないでしょうか? 私の本能は、「これは間違っているように感じますが、余分なライブラリをロードしておらず、オーバーヘッドが XmlWriter を呼び出す余分なメソッドを実行していないため、おそらく非常にパフォーマンスが高いでしょう」と言っています。また、一般的にコードが少ないようです。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);
}
フォローアップ、〜2年後、 私が言おうとしていたことに気付きましたが、完全に言い損ねました.XMLクラスを使用してこのファイルを生成するコードの塊と、文字列を使用するだけの利点は何ですか? ありますか?これは(たとえば)ジョン・サンダーの例よりも悪いですか?
私はジム・シューベルトの方法を使い、「正しさ」を争うのではなく、「私はこれを読むことができ、理にかなっている」ことを選びました。できてよかったです。John Saunder の例には何の問題もありませんが、私が達成しようとしていたことに対して、それはかなり威圧的だと感じました。プラグマティズム?多分。