Nested processing of XML
In general, the result set we query from the database may be very large, so when returning from the server to the client, the data will be divided into several pages for delivery respectively. At this time, you can use the DATAPAGESIZE attribute in the TABLE element to specify the number of recordset entries that each page contains.
For example:
<TABLE DATASRC="#xmldso" DATAPAGESIZE=10>
Obviously, if the XML data format is symmetrical, whether it is mapped to an ADO recordset or bound to a table element, the effect will be good. In practical applications, there are many examples of asymmetric XML data. For example, a book may have more than one author, which will cause certain troubles in mapping and binding. The solution to the problem is to use nesting. Each row of the table still corresponds to a main element, and each column also corresponds to a sub-element. For repeated elements, nested tables are used. Let's assume that in books.xml, the author of the first book is Dean Straight, and the authors of the second book are Charlotte Cooper, Shelley Burke, and Regina Murphy. At this point, the binding process is as follows:
● Create a TABLE element and assign the data island ID to the DATAFLD attribute;
● For individual XML elements, such as <isbn>, create a TD element and set the corresponding DATAFLD attribute;
● For duplicates element, a table is nested inside the TD element;
● Display author information in a single row and single column.
Note that the DATAFLD attribute here must be set to "$TEXT"
to ensure that the contents of the nested element are all displayed in the specified element.
The complete HTML code is as follows:
<TABLE BORDER=1 DATASRC="#xmldso">
<THEAD><TR><TH>Title</TH>
<TH>ISBN</TH>
<TH>Author</TH> </TR></THEAD>
<TBODY>
<TR><TD>
<DIV DATAFLD="title"></DIV></TD>
<TD><DIV DATAFLD="isbn">
</DIV></ TD>
<TD>
<TABLE BORDER=0 DATASRC="#xmldso" DATAFLD="author">
<TR><TD><SPAN DATAFLD="$Text"></SPAN></TD></TR>
< /TABLE>
</TD>
</TR></TBODY>
</TABLE>
In fact, the best situation when using DSO is for data with symmetric structure, and a more effective way to deal with asymmetric data is to use what we will see in the future. Introducing DOM technology.
Application of DSO technology
1. Accessing the attributes of an element
It is very simple to use DSO to access the attributes of an element. You can directly handle the attributes by sub-elements.
For example:
<book isbn="9-001-122-12">
...
</book>
In this way, when binding to an HTML table, it can be processed directly by sub-element:
<TD><SPAN DATAFLD=" isbn”> </SPAN></TD>
If the attribute name and the sub-element name are the same, add “!” in front of the element name to distinguish them. 2. Traversing the record set
A major advantage of DSO processing XML data islands as ADO record sets is that you can use various methods provided by ADO to access the data source, especially when the data island is bound to HTML elements such as SPAN, DIV and INPUT. timing. Usually these elements display the first record of the recordset. If you want to traverse the recordset, you can use the ADO methods: Move, MoveFirst, MoveLast, MoveNext and MovePrevious. For example, if you create a button response function, as long as the user clicks the "Next" button, the corresponding records can be browsed one by one.
For example:
<XML ID="xmldso" SRC="books.xml">
</XML>
Sub btnNext_onclick()
xmldso.RecordSet.MoveNext
End Sub
3. Combining with Script Language
Some users are more accustomed to writing Script language, and DSO technology can also be well combined with various Scripts.
For example (taking VB Script as an example), when accessing the record set, the code is as follows:
Dim rsBooks
Set rsBooks = xmldso.RecordSet
to access the value of the field (sub-element):
Dim sTitle
sTitle = rsBooks("title")
You can use the innerText and innerHTML attributes Pass the resulting value to the HTML element. For example, there is a DIV element named divTitle, and the assignment code is as follows:
divTitle.innerTEXT = sTitle.
Scripts can also handle many DSO events. The following table lists some of them:
The method of handling various events in scripts is Use the FOR attribute in the <SCRIPT> tag to specify the XML data island ID, and use the EVENT attribute to determine the event type.
For example, get the number of entries in the record set:
<SCRIPT Language="VB Script" FOR="xmldso" EVENT="onDataAvailable">
lblRecords.value = booklist.RecordSet.RecordCount
</SCRIPT>
In addition to displaying record data, the script The program can also quickly query, sort, edit and other operations on the record set. However, it should be pointed out that although ADO technology provides methods such as SortColumn and SortAscending to sort XML data, the effect is not as good as the sorting operation in XSL, so it is recommended that you make full use of XSL technology to realize this part of the function.
The remaining functions, such as using scripts to perform operations such as adding, deleting, and modifying record sets, or displaying HTML tables in pages, etc., are not explained here one by one. The usage is similar to the previous operations. Finally, it should be noted that all operations on DSO objects are completed on the user side, which is actually a copy of the server data object. The advantage of this is that it avoids the network from bearing the burden of large data communications. But at this time, any operations performed by the client have no impact on the data stored on the server. If you want to modify the server records, you must use the data exchange technology between the client and the server. We will discuss this in the future. Make an introduction.