軽量の解析の実装。このコードは、インターネットから情報をダウンロードせず、スクリプトを実行することも、純粋に解析します。
解析は、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である必要があるため、ここでは安全でないコードを使用してコンパイラ警告をバイパスします。