다음을 통해 공유


방법: 웹 페이지 내용의 구문을 분석하는 웹 서비스 만들기

ASP.NET을 사용하여 만든 웹 서비스에서는 개발자가 원격 HTML 페이지의 내용을 구문 분석하고 결과 데이터를 프로그래밍 방식으로 공개할 수 있도록 HTML 구문 분석 솔루션을 제공합니다. 자세한 내용은 ASP.NET XML Web services의 HTML 구문 분석을 참조하십시오.

작업 및 입력 매개 변수를 지정하려면

  1. WSDL(웹 서비스 기술 언어) 문서를 만듭니다. 이 문서는 일반적으로 .wsdl이라는 확장명을 가진 파일로 저장됩니다. 문서의 콘텐츠는 WSDL 스키마에 따라 유효한 XML로 구성되어야 합니다. ASP.NET에서 실행하는 웹 서비스에 동적으로 생성된 WSDL 문서를 바탕으로 사용할 수 있습니다. 웹 서비스 URL에 ?wsdl 인수를 추가하여 요청을 만듭니다.

  2. 작업을 정의하는 요소를 HTML 텍스트를 구문 분석하는 각 웹 서비스 메서드로 지정합니다. 이 단계와 다음 단계를 수행하려면 WSDL 형식에 대해 잘 알고 있어야 합니다.

  3. 구문 분석 메서드에서 입력 매개 변수를 사용하는 경우 해당 매개 변수를 나타내는 요소를 지정한 다음 작업에 연결합니다.

구문 분석된 HTML 페이지에서 반환되는 데이터를 지정하려면

  • XPath /definitions/binding/operation/output을 통해 표시되는 <output> 요소에 네임스페이스로 한정된 <text> XML 요소를 추가합니다. <operation> 요소는 구문 분석된 HTML을 검색하는 웹 서비스 메서드를 나타냅니다.
Note참고:

바인딩 내부의 작업 이름은 전역적으로 고유해야 합니다. 또는 동일한 응용 프로그램에서 가져온 다른 WSDL 파일과 이름 충돌이 발생하지 않도록 지정한 네임스페이스를 사용하여 Wsdl.exe를 실행할 수 있습니다.

  1. 구문 분석된 HTML 페이지에서 반환할 각 데이터 부분에 대한 <text> XML 요소에 서비스 설명의 <match> XML 요소를 추가합니다.

  2. <match> 요소에 특성을 적용합니다. ASP.NET XML Web Services의 HTML 구문 분석 항목 아래의 표에 유효한 특성이 표시됩니다.

웹 서비스에 대한 클라이언트 프록시 코드를 생성하려면

  • 에서 Wsdl.exe 도구를 실행합니다. 생성한 WSDL 파일을 입력으로 전달합니다.

예제

다음 코드 예제는 <TITLE><H1> 태그를 포함하는 간단한 웹 페이지 샘플입니다.

<HTML>
 <HEAD>
  <TITLE>Sample Title</TITLE>
 </HEAD>
 <BODY>
    <H1>Some Heading Text</H1>
 </BODY>
</HTML>

다음 코드 예제에서는 <TITLE><H1> 태그에서 텍스트의 내용을 추출하여 HTML 페이지 내용을 구문 분석하는 서비스에 대해 설명합니다. 코드 예제에서 GetTitleHttpGet 바인딩에 대해 TestHeaders 메서드가 정의됩니다. TestHeaders 메서드는 <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&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;
}

참고 항목

참조

웹 서비스 기술 언어 도구(Wsdl.exe)
MatchAttribute

개념

ASP.NET XML Web services의 HTML 구문 분석

기타 리소스

.NET Framework Regular Expressions
ASP.NET을 사용하는 XML Web services

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.