XML의 중첩 처리
일반적으로 데이터베이스에서 쿼리하는 결과 집합은 매우 클 수 있으므로 서버에서 클라이언트로 반환할 때 데이터는 각각 여러 페이지로 나누어 전달됩니다. 이때 TABLE 요소의 DATAPAGESIZE 속성을 사용하여 각 페이지에 포함된 레코드세트 항목 수를 지정할 수 있습니다.
예를 들면 다음과 같습니다.
<TABLE DATASRC="#xmldso" DATAPAGESIZE=10>
XML 데이터 형식이 대칭인 경우 ADO 레코드 세트에 매핑되거나 테이블 요소에 바인딩되면 효과가 좋습니다. 실제 응용 프로그램에는 비대칭 XML 데이터의 예가 많이 있습니다. 예를 들어 책에 저자가 두 명 이상 있을 수 있으며 이로 인해 매핑 및 바인딩에 특정 문제가 발생할 수 있습니다. 문제에 대한 해결책은 중첩을 사용하는 것입니다. 테이블의 각 행은 여전히 기본 요소에 해당하고 각 열도 하위 요소에 해당합니다. 반복되는 요소의 경우 중첩 테이블이 사용됩니다. books.xml에서 첫 번째 책의 저자는 Dean Straight이고 두 번째 책의 저자는 Charlotte Cooper, Shelley Burke 및 Regina Murphy라고 가정해 보겠습니다. 이 시점에서 바인딩 프로세스는 다음과 같습니다.
● TABLE 요소를 생성하고 DATAFLD 속성에 데이터 아일랜드 ID를 할당합니다.
● <isbn>과 같은 개별 XML 요소에 대해 TD 요소를 생성하고 해당 DATAFLD 속성을 설정합니다.
● 중복 요소의 경우 테이블이 TD 요소 내에 중첩됩니다.
● 작성자 정보를 단일 행과 단일 열에 표시합니다.
중첩된 요소의 내용이 지정된 요소에 모두 표시되도록 하려면
여기서 DATAFLD 속성을 "$TEXT"로 설정해야 합니다
.전체 HTML 코드는 다음과 같습니다:
<TABLE BORDER=1 DATASRC="#xmldso">
<THEAD><TR><TH>제목</TH>
<TH>ISBN</TH>
<TH>저자</TH> </TR></THEAD>
<TBODY>
<TR><TD>
<DIV DATAFLD="title"></DIV></TD>
<TD><DIV DATAFLD="isbn">
</DIV></ TD>
<TD>
<TABLE BORDER=0 DATASRC="#xmldso" DATAFLD="작성자">
<TR><TD><SPAN DATAFLD="$Text"></SPAN></TD></TR>
< /TABLE>
</TD>
</TR></TBODY>
</TABLE>
실제로 DSO를 사용할 때 가장 좋은 상황은 대칭 구조의 데이터에 대한 것이며, 비대칭 데이터를 처리하는 보다 효과적인 방법은 다음과 같은 방법을 사용하는 것입니다. 앞으로 DOM 기술을 소개하겠습니다.
DSO 기술 적용
1. 요소의 속성에 액세스
DSO를 사용하여 요소의 속성에 액세스하는 것은 매우 간단합니다. 하위 요소별로 속성을 직접 처리할 수 있습니다.
예:
<book isbn="9-001-122-12">
...
</book>
이러한 방식으로 HTML 테이블에 바인딩할 때 하위 요소인
<TD><SPAN
에서 직접 처리할 수 있습니다.DATAFLD=" isbn”> </SPAN></TD>
속성 이름과 하위 요소 이름이 동일한 경우 요소 이름 앞에 "!"를 추가하여 구분합니다. 2. 레코드 세트 탐색
DSO에서 XML 데이터 아일랜드를 ADO 레코드 세트로 처리하는 것의 주요 장점은 ADO에서 제공하는 다양한 방법을 사용하여 데이터 소스에 액세스할 수 있다는 것입니다. 특히 데이터 아일랜드가 SPAN, DIV 및 INPUT과 같은 HTML 요소에 바인딩된 경우 더욱 그렇습니다. .타이밍. 일반적으로 이러한 요소는 레코드 집합의 첫 번째 레코드를 표시합니다. 레코드 집합을 탐색하려면 Move, MoveFirst, MoveLast, MoveNext 및 MovePrevious와 같은 ADO 메서드를 사용할 수 있습니다. 예를 들어, 버튼 응답 기능을 생성한 경우 사용자가 "다음" 버튼을 클릭하기만 하면 해당 레코드를 하나씩 찾아볼 수 있습니다.
예:
<XML ID="xmldso" SRC="books.xml">
</XML>
Sub btnNext_onclick()
xmldso.RecordSet.MoveNext
End Sub
3. 스크립트 언어와의 결합
일부 사용자는 스크립트 언어 작성에 더 익숙하며 DSO 기술은 다양한 스크립트와도 잘 결합될 수 있습니다.
예를 들어(VB 스크립트를 예로 들면) 레코드 세트에 액세스할 때 코드는 다음과 같습니다:
Dim rsBooks
Set rsBooks = xmldso.RecordSet
필드(하위 요소)의 값에 액세스:
Dim sTitle
sTitle = rsBooks( "title")
innerText 및 innerHTML 속성을 사용할 수 있습니다. 결과 값을 HTML 요소에 전달합니다. 예를 들어 divTitle이라는 DIV 요소가 있고 할당 코드는 다음과 같습니다:
divTitle.innerTEXT = sTitle
스크립트는 또한 많은 DSO 이벤트를 처리할 수 있습니다. 다음 표에는 그 중 일부가 나열되어 있습니다
. <SCRIPT> 태그의 FOR 속성을 사용하여 XML 데이터 아일랜드 ID를 지정하고, EVENT 속성을 사용하여 이벤트 유형을 결정합니다.
예를 들어, 레코드 세트의 항목 수를 가져옵니다.
<SCRIPT Language="VB Script" FOR="xmldso" EVENT="onDataAvailable">
lblRecords.value = booklist.RecordSet.RecordCount
</SCRIPT>
레코드 표시 외에도 데이터, 스크립트 프로그램은 또한 레코드 세트에 대한 쿼리, 정렬, 편집 및 기타 작업을 신속하게 수행할 수 있습니다. 그러나 ADO 기술은 XML 데이터를 정렬하기 위해 SortColumn 및 SortAscending과 같은 메서드를 제공하지만 그 효과는 XSL의 정렬 작업만큼 좋지 않으므로 XSL 기술을 최대한 활용하여 구현하는 것이 좋습니다. 이 부분의 함수입니다.
스크립트를 사용하여 레코드 세트 추가, 삭제, 수정과 같은 작업을 수행하거나 페이지에 HTML 테이블을 표시하는 등의 나머지 기능은 여기에서 하나씩 설명하지 않습니다. 사용법은 이전 작업과 유사합니다. 마지막으로, DSO 개체에 대한 모든 작업은 실제로 서버 데이터 개체의 복사본인 사용자 측에서 완료된다는 점에 유의해야 합니다. 이 방법의 장점은 네트워크가 대규모 데이터 통신의 부담을 덜 수 있다는 것입니다. 그러나 이때 클라이언트가 수행하는 모든 작업은 서버에 저장된 데이터에 영향을 미치지 않습니다. 서버 기록을 수정하려면 클라이언트와 서버 간의 데이터 교환 기술을 사용해야 합니다. 미래를 소개합니다.