방법: 웹 페이지 내용의 구문을 분석하는 웹 서비스 만들기
ASP.NET을 사용하여 만든 웹 서비스에서는 개발자가 원격 HTML 페이지의 내용을 구문 분석하고 결과 데이터를 프로그래밍 방식으로 공개할 수 있도록 HTML 구문 분석 솔루션을 제공합니다. 자세한 내용은 ASP.NET XML Web services의 HTML 구문 분석을 참조하십시오.
작업 및 입력 매개 변수를 지정하려면
WSDL(웹 서비스 기술 언어) 문서를 만듭니다. 이 문서는 일반적으로 .wsdl이라는 확장명을 가진 파일로 저장됩니다. 문서의 콘텐츠는 WSDL 스키마에 따라 유효한 XML로 구성되어야 합니다. ASP.NET에서 실행하는 웹 서비스에 동적으로 생성된 WSDL 문서를 바탕으로 사용할 수 있습니다. 웹 서비스 URL에 ?wsdl 인수를 추가하여 요청을 만듭니다.
작업을 정의하는 요소를 HTML 텍스트를 구문 분석하는 각 웹 서비스 메서드로 지정합니다. 이 단계와 다음 단계를 수행하려면 WSDL 형식에 대해 잘 알고 있어야 합니다.
구문 분석 메서드에서 입력 매개 변수를 사용하는 경우 해당 매개 변수를 나타내는 요소를 지정한 다음 작업에 연결합니다.
구문 분석된 HTML 페이지에서 반환되는 데이터를 지정하려면
- XPath /definitions/binding/operation/output을 통해 표시되는 <output> 요소에 네임스페이스로 한정된 <text> XML 요소를 추가합니다. <operation> 요소는 구문 분석된 HTML을 검색하는 웹 서비스 메서드를 나타냅니다.
참고: |
---|
바인딩 내부의 작업 이름은 전역적으로 고유해야 합니다. 또는 동일한 응용 프로그램에서 가져온 다른 WSDL 파일과 이름 충돌이 발생하지 않도록 지정한 네임스페이스를 사용하여 Wsdl.exe를 실행할 수 있습니다. |
구문 분석된 HTML 페이지에서 반환할 각 데이터 부분에 대한 <text> XML 요소에 서비스 설명의 <match> XML 요소를 추가합니다.
<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>(.*?)<'/>
<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;
}
참고 항목
참조
웹 서비스 기술 언어 도구(Wsdl.exe)
MatchAttribute
개념
ASP.NET XML Web services의 HTML 구문 분석
기타 리소스
.NET Framework Regular Expressions
ASP.NET을 사용하는 XML Web services
Copyright © 2007 by Microsoft Corporation. All rights reserved.