none
能否不启动IE就能够将一段HTML代码解析成DOM对象模型,从而获取这个HTML代码里面的各个对象的属性值? RRS feed

  • 问题

  • 能否不启动IE就能够将一段HTML代码解析成DOM对象模型,从而获取这个HTML代码里面的各个对象的属性值?

    例如,在IE里面,通过js的getElementById、getElementsByName等方法可以很方便地获取到页面上的对象,然后调用其属性和方法。

    现在希望能够在不启动IE的前提下,将一段HTML代码解析成DOM对象模型,然后就像在IE里面写JS一样获取对象的属性和方法,请问这个能实现吗?

    例如下面的代码:

    var sHtmlCode = "some html code...";

    var doc = new DOMParser(sHtmlCode); //“DOMParser”是我梦想存在的一个对象,不知道有没有?

    var obj = doc.getElementById("xxx");

    alert(obj.innerHTML);


    da jia hao!
    2011年11月20日 4:04

答案

  • 而如果用XDocument,又没有类似getElementById之类的方法。

    而如果用WebBrowser控件,其实就是相当于启动了IE。。。。。


    1)XDocument 是没有getElement方法,这是因为XDocument把整个Html页面内容当成xml来处理。你完全可以通过Descedants或者是XDocument.Root.Element("名称")来进行处理。

    2)WebBrowser,不要用WinForm的视图控件,你用手动方法创建类进行加载。这个方法比较简单。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年11月21日 1:35

全部回复

  • 可以。

    Html本质和xml非常接近。所以建议你使用XmlDocument或者是netframeowrk3.5版本中的XDocument(LINQ-TO-SQL)来做:

    1)读取html页面:

    WebRequest req = WebRequest.Create("http://……");
    WebResponse resp = req.GetResponse();
    StreamReader sr = resp.GetResponseStream();
    string s = sr.ReadToEnd();

    2)使用LINQ-TO-XML解析:
    XDocument.Parse(s).Descedants("你的Html标签名字");
    //处理……

    第二种办法就是使用WebBrowser类或者控件来加载指定的HTML并且解析。
    比如:
    WebBrowser wb = new WebBrowser();
    wb.Navigate("http://……");

    //加载完毕之后
    while (wb.ReadyState != wb.Complete)
                    {
                        Application.DoEvents();
                    }
    wb.Document.GetElementById("你的Name");

    具体可以参考:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.htmldocument_methods.aspx


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2011年11月20日 6:48
  • 我发现用XmlDocument类加载一个html文件,根本就无法加载成功啊。看来用XmlDocument来处理的方法是不可行的。

    而如果用XDocument,又没有类似getElementById之类的方法。

     

    而如果用WebBrowser控件,其实就是相当于启动了IE。。。。。

    • 已编辑 liubin 2011年11月20日 11:26
    2011年11月20日 10:45
  • 而如果用XDocument,又没有类似getElementById之类的方法。

    而如果用WebBrowser控件,其实就是相当于启动了IE。。。。。


    1)XDocument 是没有getElement方法,这是因为XDocument把整个Html页面内容当成xml来处理。你完全可以通过Descedants或者是XDocument.Root.Element("名称")来进行处理。

    2)WebBrowser,不要用WinForm的视图控件,你用手动方法创建类进行加载。这个方法比较简单。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年11月21日 1:35


  • 而如果用XDocument,又没有类似getElementById之类的方法。

    而如果用WebBrowser控件,其实就是相当于启动了IE。。。。。


    1)XDocument 是没有getElement方法,这是因为XDocument把整个Html页面内容当成xml来处理。你完全可以通过Descedants或者是XDocument.Root.Element("名称")来进行处理。

    2)WebBrowser,不要用WinForm的视图控件,你用手动方法创建类进行加载。这个方法比较简单。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
     请教一下,直接在代码里面创建WebBrowser控件,性能比在Form里面使用这个控件有差别吗?因为我的目的是将程序放在服务器上接受客户端的请求进行处理的,到时候会有很多请求过来,就怕频繁创建太多IE进程会导致性能低下。。。

    da jia hao!
    2011年11月21日 9:38
  • 我想应该要比直接拖拽一个要省一些时间。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年11月22日 1:01