国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#中利用Markup Service實現HTML解析為DOM Tree

2019-11-18 19:10:06
字體:
來源:轉載
供稿:網友

一個輕量級Parsing 實現。這個代碼不會從網上下載任何資料,也不會執行任何腳本,純屬Parsing。
Parsing是通過MSHTML的Markup Service實現的。要正確使用這個代碼,需要添加MSHTML引用。
由于.net中沒有定義ipersistStreamInt接口,就必須自己實現,接口定義:
以下內容為程序代碼:

[ComVisible(true), ComImport(), Guid("7FD52380-4E07-101B-AE2D-08002B2EC713 " ) , InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPersistStreamInit 
{
 void GetClassID([In, Out] ref Guid pClassID);
 [return: MarshalAs(UnmanagedType.I4)] [PReserveSig]
 int IsDirty();
 void Load([In, MarshalAs(UnmanagedType.Interface)] UCOMIStream pstm);
 void Save([In, MarshalAs(UnmanagedType.Interface)] UCOMIStream pstm, 
  [In, MarshalAs(UnmanagedType.I4)] int fClearDirty);
 void GetSizeMax([Out, MarshalAs(UnmanagedType.LPArray)] long pcbSize);
 void InitNew();
}
 

以下內容為程序代碼:

  unsafe IHTMLDocument2  Parse(string s)
  {
   IHTMLDocument2 pDocument=new HTMLDocumentClass();  
   if(pDocument!=null)
   {
    IPersistStreamInit pPersist=pDocument as IPersistStreamInit ;
    pPersist.InitNew();
    pPersist=null;
    IMarkupServices ms=pDocument as IMarkupServices ;
    if(ms!=null)
    {
     IMarkupContainer pMC=null;
     IMarkupPointer pStart,pEnd;
     ms.CreateMarkupPointer(out pStart);
     ms.CreateMarkupPointer(out pEnd);
     StringBuilder sb=new StringBuilder(s); 
     IntPtr pSource=Marshal.StringToHGlobalUni(s);
     ms.ParseString(ref *(ushort*)pSource.ToPointer(),0,out pMC,pStart,pEnd);
     if(pMC!=null)
     {
      Marshal.Release(pSource);
      return pMC as IHTMLDocument2;
     }
     Marshal.Release(pSource);
    }
   }
   return null;
  }
 
 

寫代碼的時候出了一點問題,IMarkupService::ParseString第一個參數是ref ushort,顯然要傳入HTML代碼,這個ushort必須是第一個WideChar了,所以這里通過使用不安全代碼來繞過編譯器警告。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 那曲县| 鄂托克前旗| 遵义市| 大方县| 遂川县| 洞口县| 陕西省| 赤峰市| 斗六市| 克东县| 新蔡县| 遂溪县| 民勤县| 怀仁县| 沈阳市| 高阳县| 海淀区| 洪泽县| 永济市| 阳原县| 海原县| 东至县| 巨鹿县| 苍梧县| 太仆寺旗| 塔城市| 泸州市| 霸州市| 永安市| 闽清县| 嵊州市| 南乐县| 荔浦县| 崇州市| 清远市| 安丘市| 姚安县| 武宁县| 三亚市| 彩票| 和林格尔县|