Procesamiento anidado de XML
En general, el conjunto de resultados que consultamos desde la base de datos puede ser muy grande, por lo que al regresar del servidor al cliente, los datos se dividirán en varias páginas para su entrega respectivamente. En este momento, puede utilizar el atributo DATAPAGESIZE en el elemento TABLE para especificar el número de entradas del conjunto de registros que contiene cada página.
Por ejemplo:
<TABLE DATASRC="#xmldso" DATAPAGESIZE=10>
Obviamente, si el formato de datos XML es simétrico, ya sea que esté asignado a un conjunto de registros ADO o vinculado a un elemento de tabla, el efecto será bueno. En aplicaciones prácticas, hay muchos ejemplos de datos XML asimétricos. Por ejemplo, un libro puede tener más de un autor, lo que causará ciertos problemas en el mapeo y encuadernación. La solución al problema es utilizar anidamiento. Cada fila de la tabla todavía corresponde a un elemento principal y cada columna también corresponde a un subelemento. Para elementos repetidos, se utilizan tablas anidadas. Supongamos que en books.xml, el autor del primer libro es Dean Straight y los autores del segundo libro son Charlotte Cooper, Shelley Burke y Regina Murphy. En este punto, el proceso de vinculación es el siguiente:
● Cree un elemento TABLE y asigne el ID de la isla de datos al atributo DATAFLD
● Para elementos XML individuales, como <isbn>, cree un elemento TD y establezca el atributo DATAFLD correspondiente;
● Para elementos duplicados, se anida una tabla dentro del elemento TD;
● Muestra la información del autor en una sola fila y una sola columna.
Tenga en cuenta que el atributo DATAFLD aquí debe establecerse en "$TEXT"
para garantizar que todo el contenido del elemento anidado se muestre en el elemento especificado.
El código HTML completo es el siguiente:
<TABLE BORDER=1 DATASRC="#xmldso">
<THEAD><TR><TH>Título</TH>
<TH>ISBN</TH>
<TH>Autor</TH> </TR></THEAD>
<TBODY>
<TR><TD>
<DIV DATAFLD="title"></DIV></TD>
<TD><DIV DATAFLD="isbn">
</DIV></ TD>
<TD>
<TABLE BORDER=0 DATASRC="#xmldso" DATAFLD="autor">
<TR><TD><SPAN DATAFLD="$Texto"></SPAN></TD></TR>
< /TABLE>
</TD>
</TR></TBODY>
</TABLE>
De hecho, la mejor situación cuando se usa DSO es para datos con estructura simétrica, y una forma más efectiva de tratar con datos asimétricos es usar lo que Veremos en el futuro la introducción de la tecnología DOM.
Aplicación de la tecnología DSO
1. Acceder a los atributos de un elemento
Es muy sencillo utilizar DSO para acceder a los atributos de un elemento. Puede manejar directamente los atributos por subelementos.
Por ejemplo:
<book isbn="9-001-122-12">
...
</book>
De esta manera, cuando se vincula a una tabla HTML, se puede procesar directamente por subelemento:
<TD><SPAN DATAFLD=" isbn”> </SPAN></TD>
Si el nombre del atributo y el nombre del subelemento son iguales, agregue “!” delante del nombre del elemento para distinguirlos. 2. Atravesar el conjunto de registros
Una ventaja importante del procesamiento DSO de islas de datos XML como conjuntos de registros ADO es que puede utilizar varios métodos proporcionados por ADO para acceder a la fuente de datos, especialmente cuando la isla de datos está vinculada a elementos HTML como SPAN, DIV e INPUT. . momento. Por lo general, estos elementos muestran el primer registro del conjunto de registros. Si desea recorrer el conjunto de registros, puede utilizar los métodos ADO: Move, MoveFirst, MoveLast, MoveNext y MovePrevious. Por ejemplo, si crea una función de respuesta de botón, siempre que el usuario haga clic en el botón "Siguiente", los registros correspondientes se pueden explorar uno por uno.
Por ejemplo:
<XML ID="xmldso" SRC="books.xml">
</XML>
Sub btnNext_onclick()
xmldso.RecordSet.MoveNext
End Sub
3. Combinación con lenguaje Script
Algunos usuarios están más acostumbrados a escribir lenguaje Script y la tecnología DSO también se puede combinar bien con varios Scripts.
Por ejemplo (tomando VB Script como ejemplo), al acceder al conjunto de registros, el código es el siguiente:
Dim rsBooks
Configure rsBooks = xmldso.RecordSet
para acceder al valor del campo (subelemento):
Dim sTitle
sTitle = rsBooks( "título")
Puede utilizar los atributos InnerText e InnerHTML. Pase el valor resultante al elemento HTML. Por ejemplo, hay un elemento DIV llamado divTitle y el código de asignación es el siguiente:
divTitle.innerTEXT = sTitle
Los scripts también pueden manejar muchos eventos DSO. La siguiente tabla enumera algunos de ellos:
El método para manejar varios eventos en los scripts es. Utilice el atributo FOR en la etiqueta <SCRIPT> para especificar el ID de la isla de datos XML y utilice el atributo EVENT para determinar el tipo de evento.
Por ejemplo, obtenga el número de entradas en el conjunto de registros:
<SCRIPT Language="VB Script" FOR="xmldso" EVENT="onDataAvailable">
lblRecords.value = booklist.RecordSet.RecordCount
</SCRIPT>
Además de mostrar el registro datos, el script El programa también puede consultar, ordenar, editar y otras operaciones rápidamente en el conjunto de registros. Sin embargo, cabe señalar que aunque la tecnología ADO proporciona métodos como SortColumn y SortAscending para ordenar datos XML, el efecto no es tan bueno como la operación de clasificación en XSL, por lo que se recomienda que aproveche al máximo la tecnología XSL para lograrlo. esta parte de la función.
Las funciones restantes, como el uso de scripts para realizar operaciones como agregar, eliminar y modificar conjuntos de registros, o mostrar tablas HTML en páginas, etc., no se explican aquí una por una. El uso es similar a las operaciones anteriores. Finalmente, cabe señalar que todas las operaciones en los objetos DSO se completan en el lado del usuario, que en realidad es una copia del objeto de datos del servidor. La ventaja de esto es que evita que la red soporte la carga de grandes comunicaciones de datos. Pero en este momento, cualquier operación realizada por el cliente no tiene ningún impacto en los datos almacenados en el servidor. Si desea modificar los registros del servidor, debe utilizar la tecnología de intercambio de datos entre el cliente y el servidor. el futuro Haz una introducción.