我想把webBrowser中全部内容保存为mht格式。其中一个需要做的是把html中的相对URL地址转换成绝对URL地址。<HTML>
<HEAD>
  <BASE HREF="http://msdn.microsoft.com/workshop/author/dhtml/reference/"/></HEAD><BODY>
Click <A HREF="properties/href_2.asp">here</A> to learn about the 
href property.
</BODY>
</HTML>请注意,上面摘自MSDN,它描述了记录在html中的基础URL地址。程序就是提取它再和相对URL地址相加,就构成了绝对URL地址。
但我从多个网站保存下来的html文档看,并没有包含BASE语句。也就是说,无法提取到基础URL地址(不过这些网页在指定资源时都采用了绝对路径)。网上示例代码采取的办法是如果提取不到基础URL地址,就直接采用该网页的URL地址。        private string GetUrlBase(mshtml.IHTMLDocument2 doc)
        {
            mshtml.IHTMLBaseElement baseElem = doc.all.item("base", 0) as mshtml.IHTMLBaseElement;
            if (baseElem != null)
            {
                return baseElem.href;
            }
            return doc.location.href;
        }
我就纳闷了,这网页的URL地址怎么能直接使用呢?如果网页采用了相对URL地址,而且不指出BASE,那就应该没办法保存这个网页全部内容了啊?!

解决方案 »

  1.   

    所谓相对,需要有参照物。形成一个绝对URL,优先选择相对地址+BASE地址,如果没有BASE地址,选择当前页面地址为参照地址,即绝对地址等于当前页面地址+相对地址。
    这样好比我们在读取一个文件,如果只有文件名,系统会在环境变量PATU指明的路径下搜索文件,如果不存在则在当前路径下搜索文件,通过这样手段就形成了文件的绝对路径。(也能可能先搜索当前路径,再搜索PATH下的路径,我这里只是举例类比说明)