XMLサイトマップを生成する既存のコードにXSLファイル参照を追加しようとしています。実際の物理XMLファイルはありません。コードでは、URLリライトパス(ハンドラはSitemapProvider.ashxと呼ばれ、sitemap.xmlへのリクエストを処理します)に応答するジェネリックハンドラを使用してXML応答を作成します。私の最終目標は、退屈なsitemap.xmlを最終的にスタイルして飾ることです。C#で動的に生成されたXMLにxml-stylesheetを追加する
ここに私のコードの抜粋です:
public void ProcessRequest(HttpContext context)
{
XmlDocument doc = ShowXML(context);
context.Response.ContentType = "text/xml";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.Expires = -1;
context.Response.Cache.SetAllowResponseInBrowserHistory(true);
doc.Save(context.Response.Output);
}
private XmlDocument ShowXML(HttpContext context)
{
XmlDocument doc = new XmlDocument();
var useXSL = doc.CreateProcessingInstruction(
"xml-stylesheet", "type=\"text/xsl\" href=\"~/sitemap.xsl\""
);
doc.AppendChild(useXSL);
doc.LoadXml(makeXML());
return doc;
}
private string makeXML()
{
string xmlString = "";
xmlString +=
//"<?xml-stylesheet type=\"text/xsl\" href=\"/sitemap.xsl\"?>" +
"<urlset xmlns = \"http://www.sitemaps.org/schemas/sitemap/0.9\">" +
// and so it goes
私が仕事をしたり、私が()makeXMLでコメントアウト1つ)ShowXML中のいずれかのコード(ように見えることはできません。
私は間違っていますか? (以前の挿入処理命令など)を文書内の任意のノードを消去することになるので、このアプローチは機能することができない文
doc.AppendChild(useXSL);
doc.LoadXml(makeXML());
LoadXml
の順序
あなたは 'XmlDocument'を使う必要があるのでしょうか?あなたが望むXMLで文字列を生成し、それを直接レスポンスに書くのは簡単ではないでしょうか? – erdomke
主に一貫性と検証のためです。私はまだC#を学んでいますが、これは言語を使った10週目です。 xmlが無効になるようなものを逃した場合、例外がスローされ出力されないので、学習プロセスに役立ちます。 –