가벼운 구문 분석 구현. 이 코드는 인터넷에서 정보를 다운로드하지 않으며 스크립트를 실행하지 않으며 순전히 구문 분석됩니다.
구문 분석은 MSHTML의 MarkupService를 통해 구현됩니다. 이 코드를 올바르게 사용하려면 MSHTML 참조를 추가해야합니다.
imperstrestreamint 인터페이스는 .NET에서 정의되지 않으므로 자체적으로 구현해야하며 인터페이스 정의는 다음과 같습니다.
| 다음 내용은 프로그램 코드입니다. [comvisible (true), comimport (), Guid ( "7FD52380-4E07-101B-AE2D-08002B2C713"), InterfacetyPeatTribute (cominterfacetype.interfaceisiunknown)] publicinterfaceipersiststreaminit { voidgetClassId ([in, out] refguidpclassid); [반품 : Marshalas (UnmanagedType.i4)] [Preservesig] intisdirty (); voidload ([in, marshalas (unmanagedtype.interface)] ucomistreampstm); voidSave ([in, arshalas (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 (들); 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 여야하므로 안전하지 않은 코드를 사용하여 컴파일러 경고를 우회합니다.
가장 실용적인 웹 페이지 특수 효과 코드를 수집하십시오!