ソースの表示以前のリビジョンバックリンク全て展開する/折り畳む文書の先頭へ Share via Share via... Twitter LinkedIn Facebook Pinterest Telegram WhatsApp Yammer Reddit Teams最近の変更Send via e-Mail印刷パーマリンク × « Blueprintで構造体のメンバ変数の値を設定する方法 第51回 FreeBSD勉強会に行ってきた〜rerootはヤバい » C#でローカルのDTDファイルを使うXMLリゾルバを作る 以前、C#でXmlDocumentを作る時にリゾルバでタイムアウトすると書いたが、ようやくローカルのDTDファイルを使ったXMLリゾルバが作れたので、コードをまるっと公開。尚、.NET Framework 4では殆ど同じことを行うXmlPreloadedResolverクラスが追加されているので、使えるならそっちを使うのが良い。悲しいかな、うちは.NET 3.5なのさ…… using System; using System.Collections.Generic; using System.Xml; using System.IO; namespace ProductionKusoGA { class LocalXmlResolver : XmlResolver { public LocalXmlResolver() { } public override System.Net.ICredentials Credentials { set { } } public override Uri ResolveUri(Uri baseUri, string relativeUri) { Uri uri = DocTypeManager.Instance.GetDTDURI(relativeUri); return uri != null ? uri : base.ResolveUri(baseUri, relativeUri); } public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn) { object entity = DocTypeManager.Instance.GetDTDStream(absoluteUri.AbsoluteUri); if (entity == null) { XmlUrlResolver resolver = new XmlUrlResolver(); entity = resolver.GetEntity(absoluteUri, role, ofObjectToReturn); } return entity; } class DocTypeManager { public static readonly DocTypeManager Instance = new DocTypeManager(); public Uri GetDTDURI(string inFPI) { Uri dtdURI = null; URIForFPI.TryGetValue(inFPI, out dtdURI); return dtdURI; } public FileStream GetDTDStream(string inURI) { FileStream stream = null; if (DTDStreamForURI.TryGetValue(inURI, out stream) == false) { string dtdFile = null; if (DTDFileForURI.TryGetValue(inURI, out dtdFile)) { string RESOURCE_DIR = "..."; stream = new FileStream(Path.Combine(RESOURCE_DIR, dtdFile), FileMode.Open); DTDStreamForURI.Add(inURI, stream); } } return stream; } DocTypeManager() { URIForFPI = new Dictionary<string,Uri>(); DTDFileForURI = new Dictionary<string,string>(); DTDStreamForURI = new Dictionary<string, FileStream>(); AddDTD("-//W3C//DTD XHTML 1.0 Strict//EN", @"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd", @"path/to/xhtml1-strict.dtd"); AddDTD("-//W3C//DTD XHTML 1.0 Trasitional//EN", @"http://www.w3.org/TR/xhtml1/DTD/xhtml1-trasitional.dtd", @"path/to/xhtml1-trasitional.dtd"); AddDTD("-//W3C//DTD XHTML 1.0 Frameset//EN", @"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd", @"path/to/xhtml1-frameset.dtd"); AddDTD("xhtml-lat1.ent", @"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent", @"path/to/xhtml-lat1.ent"); AddDTD("xhtml-symbol.ent", @"http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent", @"path/to/xhtml-symbol.ent"); AddDTD("xhtml-special.ent", @"http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent", @"path/to/xhtml-special.ent"); } ~DocTypeManager() { foreach (var pair in DTDStreamForURI) { if (pair.Value != null) { pair.Value.Dispose(); } } } void AddDTD(string inFPI, string inURI, string inFilepath) { URIForFPI.Add(inFPI, new Uri(inURI)); DTDFileForURI.Add(inURI, inFilepath); } Dictionary<string, Uri> URIForFPI { get; set; } Dictionary<string, string> DTDFileForURI { get; set; } Dictionary<string, FileStream> DTDStreamForURI{ get; set; } } } } DTDファイルのパスを適宜変更し、xmlDocument.Resolver = new LocalXmlResolver();ってな感じで設定してやればおk。DTDを増やしたいときはAddDTDを増やす。DTDが内部で参照しているファイル(上記コードで言えばxhtml-lat1.entとか)も漏れなく追加する必要がある。 一応、コードのライセンスはパブリックドメインってことで。煮るなり焼くなりお好きにどうぞ。 Comments розы энциклопедия описание фото электроника россии https://vk.com/wall227102920_1876 можно ли заниматься спортом приколы включи https://vk.com/wall153725871_2161 1 энциклопедии приключения электроника актеры схема электроники спорт дети слова из слова энциклопедия энциклопедия 3 энциклопедии скачать бесплатно 1 | приколы про работу | 2024-12-07 11:29 | reply nsfw ai sites приложение ai nsfw https://daltonwgpw74185.tribunablog.com/nude-ai-exploring-the-boundaries-of-technology-and-ethics-44676319 nsfw ai prompt ai story generator nsfw http://fruit-impex.by/index.php?subaction=userinfo&user=yrexej ai chat nsfw cr top 8 nsfw image edit ai nsfw путукфещу ai nsfw ai generator возвращение nsfw character ai голосование nsfw chat ai скачать ai generated pictur 18 nsfw hentai 2 | furry nsfw ai | 2024-12-19 06:00 | reply Name E-Mail Website 人間の証明として、ボックス内の全ての文字を入力してください。 この項目は空のままにして下さい:Preview Comment blog/2016/2016-04-13.txt 最終更新: 2016-10-24 12:58by Decomo