80 lines
2.9 KiB
C#
80 lines
2.9 KiB
C#
using CYQ.Data.Properties;
|
||
using CYQ.Data.Tool;
|
||
using System;
|
||
using System.IO;
|
||
|
||
namespace CYQ.Data.Xml
|
||
{
|
||
internal class ResolverDtd
|
||
{
|
||
public static void Resolver(ref System.Xml.XmlDocument xmlDoc)
|
||
{
|
||
xmlDoc.XmlResolver = XHtmlUrlResolver.Instance;
|
||
}
|
||
}
|
||
internal class XHtmlUrlResolver : System.Xml.XmlUrlResolver
|
||
{
|
||
private static XHtmlUrlResolver _Resolver = null;
|
||
public static XHtmlUrlResolver Instance
|
||
{
|
||
get
|
||
{
|
||
if (_Resolver == null)
|
||
{
|
||
_Resolver = new XHtmlUrlResolver();
|
||
}
|
||
return _Resolver;
|
||
}
|
||
|
||
}
|
||
private string dtdUri = null;
|
||
|
||
public string DtdUri
|
||
{
|
||
get
|
||
{
|
||
if (dtdUri == null)
|
||
{
|
||
dtdUri = AppConfig.XHtml.DtdUri;
|
||
string folder = Path.GetDirectoryName(dtdUri);
|
||
//检测文件是否存在
|
||
if (!Directory.Exists(folder))//有异常直接抛
|
||
{
|
||
Directory.CreateDirectory(folder);
|
||
}
|
||
string[] items = new string[] { "/xhtml1-transitional.dtd", "/xhtml-lat1.ent", "/xhtml-special.ent", "/xhtml-symbol.ent" };
|
||
if (!File.Exists(folder + items[0]))
|
||
{
|
||
using (FileStream fs = File.Create(folder + items[0]))
|
||
{
|
||
fs.Write(Resources.xhtml1_transitional, 0, Resources.xhtml1_transitional.Length);
|
||
}
|
||
using (FileStream fs = File.Create(folder + items[1]))
|
||
{
|
||
fs.Write(Resources.xhtml_lat1, 0, Resources.xhtml_lat1.Length);
|
||
}
|
||
using (FileStream fs = File.Create(folder + items[2]))
|
||
{
|
||
fs.Write(Resources.xhtml_special, 0, Resources.xhtml_special.Length);
|
||
}
|
||
using (FileStream fs = File.Create(folder + items[3]))
|
||
{
|
||
fs.Write(Resources.xhtml_symbol, 0, Resources.xhtml_symbol.Length);
|
||
}
|
||
}
|
||
}
|
||
return dtdUri;
|
||
}
|
||
}
|
||
///assemblyShortName;component/resourceLocation, 例如"/SilverlightLibraryAssembly;component/image.png"。 请注意,需要使用前导斜杠和 component 关键字(后跟一个斜杠)。
|
||
public override Uri ResolveUri(Uri baseUri, string relativeUri)
|
||
{
|
||
if (relativeUri.Contains("xhtml1-transitional.dtd") && DtdUri != null)
|
||
{
|
||
relativeUri = DtdUri;
|
||
}
|
||
return base.ResolveUri(baseUri, relativeUri);
|
||
}
|
||
}
|
||
}
|