XML のネストされた処理
一般に、データベースからクエリを実行する結果セットは非常に大きい場合があるため、サーバーからクライアントに返される際、データはそれぞれ複数のページに分割されて配信されます。このとき、TABLE 要素の DATAPAGESIZE 属性を使用して、各ページに含まれるレコードセット エントリの数を指定できます。
次に例を示します。
<TABLE DATASRC="#xmldso" DATAPAGESIZE=10>
XML データ形式が対称であれば、ADO レコードセットにマップされているか、テーブル要素にバインドされているかにかかわらず、効果は良好です。実際のアプリケーションでは、非対称 XML データの例が多数あります。たとえば、書籍には複数の著者がいる場合があり、マッピングやバインディングで特定の問題が発生します。この問題の解決策は、ネストを使用することです。テーブルの各行は引き続きメイン要素に対応し、各列もサブ要素に対応します。繰り返される要素には、ネストされたテーブルが使用されます。 Books.xml で、最初の本の著者が Dean Straight で、2 番目の本の著者が Charlotte Cooper、Shelley Burke、Regina Murphy であると仮定します。この時点でのバインド プロセスは次のとおりです。
● TABLE 要素を作成し、データ アイランド ID を DATAFLD 属性に割り当てます。
● <isbn> などの個々の XML 要素に対して、TD 要素を作成し、対応する DATAFLD 属性を設定します。
● 重複要素の場合、表は TD 要素内にネストされます。
● 著者情報を 1 行 1 列で表示します。
ネストされた要素の内容がすべて指定された要素に表示されるようにするには、
ここでの 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.レコード セットのトラバース
XML データ アイランドを ADO レコード セットとして DSO 処理する主な利点は、特にデータ アイランドが SPAN、DIV、INPUT などの HTML 要素にバインドされている場合、ADO が提供するさまざまなメソッドを使用してデータ ソースにアクセスできることです。 . タイミング。通常、これらの要素にはレコードセットの最初のレコードが表示されます。レコードセットを移動する場合は、ADO メソッドである Move、MoveFirst、MoveLast、MoveNext、および MovePrevious を使用できます。たとえば、ボタン応答関数を作成すると、ユーザーが「次へ」ボタンをクリックする限り、対応するレコードを 1 つずつ参照できます。
例:
<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 テクノロジには SortColumn や SortAscending などの XML データを並べ替えるメソッドが用意されていますが、その効果は XSL での並べ替え操作ほど良くないため、XSL テクノロジを最大限に活用して実現することをお勧めします。関数のこの部分。
スクリプトを使用してレコード セットの追加、削除、変更などの操作を実行したり、ページに HTML テーブルを表示したりする残りの機能については、ここでは個別に説明しません。使用方法は前の操作と同様です。最後に、DSO オブジェクトに対するすべての操作は、実際にはサーバー データ オブジェクトのコピーであるユーザー側で完了することに注意してください。この利点は、ネットワークが大規模なデータ通信の負担を負わないことです。ただし、現時点では、クライアントが実行する操作はサーバーに保存されているデータには影響しません。サーバーのレコードを変更する場合は、クライアントとサーバーの間でデータ交換テクノロジを使用する必要があります。これについては、「」で説明します。未来を紹介します。