方法 : Web ページのコンテンツを解析する Web サービスを作成する
このトピックの対象は、レガシ テクノロジに特定されています。XML Web サービスと XML Web サービス クライアントは以下を使用して作成してください。 Windows Communication Foundation.
ASP.NET を使用して作成した Web サービスでは HTML 解析ソリューションを使用できます。開発者はリモート HTML ページのコンテンツを解析でき、結果のデータをプログラムで公開できます。詳細については、「ASP.NET XML Web サービスによる HTML 解析」を参照してください。
操作と入力パラメーターを指定するには
Web サービス記述言語ツール (WSDL: Web Services Description Language) ドキュメントを作成します。通常、このファイルは .wsdl というファイル名の拡張子として保存します。ドキュメントのコンテンツは、WSDL スキーマに従った有効な XML で構成されている必要があります。プロトタイプでは、ASP.NET で実行されている Web サービス用に動的に生成された WSDL ドキュメントを使用できます。Web サービスの URL に ?wsdl 引数を追加して要求を実行します。
HTML テキストを解析する各 Web サービス メソッドの操作を定義する要素を指定します。この手順と次の手順では、WSDL 形式に関する知識が必要です。
解析メソッドが入力パラメーターを取る場合は、これらのパラメーターを表す要素を指定し、これを操作と関連付けます。
解析された HTML ページから返されるデータを指定するには
- /definitions/binding/operation/output という XPath によって示される <output> 要素内に、名前空間で修飾された <text> XML 要素を追加します。<operation> 要素は、解析した HTML を取得する Web サービス メソッドを表します。
注 : |
---|
バインディング内の操作名は、グローバルに一意である必要があります。または、同じアプリケーションにインポートされた他の WSDL ファイルによって名前の競合が発生しないように、指定した名前空間で Wsdl.exe を実行できます。 |
サービスの説明の、解析した HTML ページから返す各データの <text> XML 要素内に、<match> XML 要素を追加します。
<match> 要素に属性を適用します。有効な属性は、「ASP.NET XML Web サービスによる HTML 解析」にある表に示されています。
Web サービスのクライアント プロキシ コードを生成するには
- Windows® Software Development Kit (SDK) の Wsdl.exe ツールを実行します。入力として、作成した WSDL ファイルを指定します。
例
<TITLE>
タグと <H1>
タグを含む簡単な Web ページ サンプルのコード例を次に示します。
<HTML>
<HEAD>
<TITLE>Sample Title</TITLE>
</HEAD>
<BODY>
<H1>Some Heading Text</H1>
</BODY>
</HTML>
HTML ページのコンテンツを解析し、<TITLE>
タグと <H1>
タグ内のテキストの内容を抽出するサービスの説明のコード例を次に示します。コード例では、GetTitleHttpGet
バインディングに TestHeaders
メソッドが定義されます。TestHeaders
メソッドは、解析された HTML ページから返される 2 つのデータを <match> XML 要素である Title
と H1
で定義します。これらは、それぞれ <TITLE>
タグと <H1>
タグのコンテンツを解析します。
<?xml version="1.0"?>
<definitions xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:http="https://schemas.xmlsoap.org/wsdl/http/"
xmlns:mime="https://schemas.xmlsoap.org/wsdl/mime/"
xmlns:soapenc="https://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s0="http://tempuri.org/"
targetNamespace="http://tempuri.org/"
xmlns="https://schemas.xmlsoap.org/wsdl/">
<types>
<s:schema targetNamespace="http://tempuri.org/"
attributeFormDefault="qualified"
elementFormDefault="qualified">
<s:element name="TestHeaders">
<s:complexType derivedBy="restriction"/>
</s:element>
<s:element name="TestHeadersResult">
<s:complexType derivedBy="restriction">
<s:all>
<s:element name="result" type="s:string" nullable="true"/>
</s:all>
</s:complexType>
</s:element>
<s:element name="string" type="s:string" nullable="true"/>
</s:schema>
</types>
<message name="TestHeadersHttpGetIn"/>
<message name="TestHeadersHttpGetOut">
<part name="Body" element="s0:string"/>
</message>
<portType name="GetTitleHttpGet">
<operation name="TestHeaders">
<input message="s0:TestHeadersHttpGetIn"/>
<output message="s0:TestHeadersHttpGetOut"/>
</operation>
</portType>
<binding name="GetTitleHttpGet" type="s0:GetTitleHttpGet">
<http:binding verb="GET"/>
<operation name="TestHeaders">
<http:operation location="MatchServer.html"/>
<input>
<http:urlEncoded/>
</input>
<output>
<text xmlns="https://microsoft.com/wsdl/mime/textMatching/">
<match name='Title' pattern='TITLE>(.*?)<'/>
<match name='H1' pattern='H1>(.*?)<'/>
</text>
</output>
</operation>
</binding>
<service name="GetTitle">
<port name="GetTitleHttpGet" binding="s0:GetTitleHttpGet">
<http:address location="https://localhost" />
</port>
</service>
</definitions>
前のサービスの説明で Wsdl.exe によって生成されるプロキシ クラスの一部分のコード例を次に示します。
' GetTitle is the name of the proxy class.
Public Class GetTitle
Inherits HttpGetClientProtocol
Public Function TestHeaders() As TestHeadersMatches
Return CType(Me.Invoke("TestHeaders", (Me.Url + _
"/MatchServer.html"), New Object(-1) {}),TestHeadersMatches)
End Function
End Class
Public Class TestHeadersMatches Public Title As String Public H1 As String
End Class
' GetTitle is the name of the proxy class.
public class GetTitle : HttpGetClientProtocol
{
public TestHeadersMatches TestHeaders()
{
return ((TestHeadersMatches)(this.Invoke("TestHeaders",
(this.Url + "/MatchServer.html"), new object[0])));
}
}
public class TestHeadersMatches
{
public string Title; public string H1;
}
参照
リファレンス
Web サービス記述言語ツール (Wsdl.exe)
MatchAttribute
概念
ASP.NET XML Web サービスによる HTML 解析
その他のリソース
.NET Framework Regular Expressions
ASP.NET を使用した XML Web サービス