軽量の解析の実装。このコードは、インターネットから情報をダウンロードせず、スクリプトを実行することも、純粋に解析します。
解析は、MSHTMLのMarkUpServiceを介して実装されます。このコードを正しく使用するには、MSHTMLリファレンスを追加する必要があります。
ImpersistStreamintインターフェイスは.NETで定義されていないため、それ自体で実装する必要があり、インターフェイス定義は次のとおりです。
| 次のコンテンツはプログラムコードです。 [comvisible(true)、comimport()、guid( "7fd52380-4e07-101b-ae2d-08002b2b2ec713")、interfaceTypeattribute(cominterfaceType.interfaceisiunknown)]]] publicInterfacePersistStreamInit { VoidgetClassid([in、out] refguidpclassid); [Return:Marshalas(UnmanagedType.I4)] [Presvesig] intisdirty(); voidload([in、marshalas(unmanagedtype.interface)] ucomistreampstm); voidsave([in、marshalas(unmanagedtype.interface)] ucomistreampstm、 [in、marshalas(unmanagedtype.i4)] intfcleardirty); voidgetsizemax([out、marshalas(unmanagedtype.lparray)] longpcbsize); voidinitnew(); } |
|
| 次のコンテンツはプログラムコードです。 unsafeihtmldocument2parse(文字列) { ihtmldocument2pdocument = newhtmldocumentClass(); if(pdocument!= null) { ipersistStreamInitppersist = pdocumentasipersistStreaminit; ppsist.initnew(); ppsist = null; imakupservicesms = pdocumentasimarkupservices; if(ms!= null) { ImmarkupContainerpmc = null; imarkuppointerpstart、pend; Ms.CreateMarkuppointer(outpstart); Ms.CreateMarkuppointer(Outpend); StringBuildersB = NewStringBuilder(s); intptrpsource = marshal.stringtohglobaluni(s); Ms.Parsestring(Ref*(USHORT*)psource.topointer()、0、outpmc、pstart、pend); if(pmc!= null) { Marshal.Release(Psource); returnpmcasihtmldocument2; } Marshal.Release(Psource); } } returnnull; } |
|
コードを書くときに何かがうまくいかなかった。 MarkupService :: Parsestringの最初のパラメーターは払い戻しです。明らかに、HTMLコードに合格するには、このUSHORTが最初のWideCharである必要があるため、ここでは安全でないコードを使用してコンパイラ警告をバイパスします。
最も実用的なWebページSpecial Effectsコードを収集してください!