方法 : Web ページのコンテンツを解析する Web サービスを作成する

このトピックの対象は、レガシ テクノロジに特定されています。XML Web サービスと XML Web サービス クライアントは以下を使用して作成してください。 Windows Communication Foundation.

ASP.NET を使用して作成した Web サービスでは HTML 解析ソリューションを使用できます。開発者はリモート HTML ページのコンテンツを解析でき、結果のデータをプログラムで公開できます。詳細については、「ASP.NET XML Web サービスによる HTML 解析」を参照してください。

操作と入力パラメーターを指定するには

  1. Web サービス記述言語ツール (WSDL: Web Services Description Language) ドキュメントを作成します。通常、このファイルは .wsdl というファイル名の拡張子として保存します。ドキュメントのコンテンツは、WSDL スキーマに従った有効な XML で構成されている必要があります。プロトタイプでは、ASP.NET で実行されている Web サービス用に動的に生成された WSDL ドキュメントを使用できます。Web サービスの URL に ?wsdl 引数を追加して要求を実行します。

  2. HTML テキストを解析する各 Web サービス メソッドの操作を定義する要素を指定します。この手順と次の手順では、WSDL 形式に関する知識が必要です。

  3. 解析メソッドが入力パラメーターを取る場合は、これらのパラメーターを表す要素を指定し、これを操作と関連付けます。

解析された HTML ページから返されるデータを指定するには

  1. /definitions/binding/operation/output という XPath によって示される <output> 要素内に、名前空間で修飾された <text> XML 要素を追加します。<operation> 要素は、解析した HTML を取得する Web サービス メソッドを表します。
xxb0bsdh.note(ja-jp,VS.100).gif注 :
バインディング内の操作名は、グローバルに一意である必要があります。または、同じアプリケーションにインポートされた他の WSDL ファイルによって名前の競合が発生しないように、指定した名前空間で Wsdl.exe を実行できます。

  1. サービスの説明の、解析した HTML ページから返す各データの <text> XML 要素内に、<match> XML 要素を追加します。

  2. <match> 要素に属性を適用します。有効な属性は、「ASP.NET XML Web サービスによる HTML 解析」にある表に示されています。

Web サービスのクライアント プロキシ コードを生成するには

  1. 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 要素である TitleH1 で定義します。これらは、それぞれ <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&gt;(.*?)&lt;'/>
          <match name='H1' pattern='H1&gt;(.*?)&lt;'/>
         </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 サービス