国产探花免费观看_亚洲丰满少妇自慰呻吟_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了,所以這里通過使用不安全代碼來繞過編譯器警告。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 防城港市| 宁强县| 新安县| 句容市| 冕宁县| 巴中市| 永吉县| 潼南县| 甘孜县| 灵石县| 阿勒泰市| 邵东县| 黎平县| 南漳县| 田阳县| 维西| 福泉市| 海阳市| 涟水县| 游戏| 耒阳市| 高安市| 旺苍县| 海林市| 阳朔县| 枣强县| 曲沃县| 井冈山市| 迁西县| 龙里县| 溆浦县| 孝昌县| 隆安县| 黄大仙区| 洪江市| 策勒县| 湖州市| 藁城市| 宁都县| 阳东县| 措美县|