We've seen that Internet Explorer DSOs can handle hierarchical recordsets in which each record itself has an internal recordset. The internal recordsets I used each contained two records, but that's hardly a realistic example; in real-world documents, recordsets can be of any length. How do the DSOs in Internet Explorer stack up here? Take a look at this new document, ch08_11.xml, in which each internal recordset has between one and three <DELIVERY> records: Listing ch08_11.xml<?xml version="1.0"?> <CUSTOMERS> <CUSTOMER> <NAME>Charles</NAME> <RECORD> <CUSTOMER_ID>58704</CUSTOMER_ID> <PURCHASE_DATE>10/15/2003</PURCHASE_DATE> <DEPARTMENT>Meat</DEPARTMENT> <PRODUCT_NAME>Ham</PRODUCT_NAME> <DELIVERY> <DATE>10/20/2003</DATE> <TOTAL_COST>.99</TOTAL_COST> </DELIVERY> <DELIVERY> <DATE>10/25/2003</DATE> <TOTAL_COST>.49</TOTAL_COST> </DELIVERY> <DELIVERY> <DATE>10/25/2003</DATE> <TOTAL_COST>.49</TOTAL_COST> </DELIVERY> </RECORD> </CUSTOMER> <CUSTOMER> <NAME>Franklin</NAME> <RECORD> <CUSTOMER_ID>58705</CUSTOMER_ID> <PURCHASE_DATE>10/15/2003</PURCHASE_DATE> <DEPARTMENT>Produce</DEPARTMENT> <PRODUCT_NAME>Tomatoes</PRODUCT_NAME> <DELIVERY> <DATE>10/20/2003</DATE> <TOTAL_COST>.00</TOTAL_COST> </DELIVERY> </RECORD> </CUSTOMER> <CUSTOMER> <NAME>Phoebe</NAME> <RECORD> <CUSTOMER_ID>58706</CUSTOMER_ID> <PURCHASE_DATE>10/15/2003</PURCHASE_DATE> <DEPARTMENT>Meat</DEPARTMENT> <PRODUCT_NAME>Turkey</PRODUCT_NAME> <DELIVERY> <DATE>10/20/2003</DATE> <TOTAL_COST>.99</TOTAL_COST> </DELIVERY> <DELIVERY> <DATE>10/25/2003</DATE> <TOTAL_COST>.99</TOTAL_COST> </DELIVERY> </RECORD> </CUSTOMER> <CUSTOMER> <NAME>Mark</NAME> <RECORD> <CUSTOMER_ID>58707</CUSTOMER_ID> <PURCHASE_DATE>10/15/2003</PURCHASE_DATE> <DEPARTMENT>Meat</DEPARTMENT> <PRODUCT_NAME>Beef</PRODUCT_NAME> <DELIVERY> <DATE>10/20/2003</DATE> <TOTAL_COST>.95</TOTAL_COST> </DELIVERY> <DELIVERY> <DATE>10/25/2003</DATE> <TOTAL_COST>.95</TOTAL_COST> </DELIVERY> </RECORD> </CUSTOMER> <CUSTOMER> <NAME>Nancy</NAME> <RECORD> <CUSTOMER_ID>58708</CUSTOMER_ID> <PURCHASE_DATE>10/15/2003</PURCHASE_DATE> <DEPARTMENT>Frozen</DEPARTMENT> <PRODUCT_NAME>Broccoli</PRODUCT_NAME> <DELIVERY> <DATE>10/20/2003</DATE> <TOTAL_COST>.99</TOTAL_COST> </DELIVERY> <DELIVERY> <DATE>10/25/2003</DATE> <TOTAL_COST>.99</TOTAL_COST> </DELIVERY> <DELIVERY> <DATE>5-3-2002</DATE> <TOTAL_COST>00.00</TOTAL_COST> </DELIVERY> </RECORD> </CUSTOMER> </CUSTOMERS> In fact, this is not a problem; here's the page I'll use to display this data: Listing ch08_12.html<HTML> <HEAD> <TITLE> Variable Size Hierarchical Records </TITLE> </HEAD> <BODY> <CENTER> <H1> Variable Size Hierarchical Records </H1> <XML SRC="ch08_11.xml" ID="customers"></XML> <TABLE DATASRC="#customers" BORDER="1"> <TR> <TH><DIV DATAFLD="NAME"></DIV></TH> <TD> <TABLE DATASRC="#customers" DATAFLD="RECORD"> <TR> <TD> <TABLE DATASRC="#customers" CELLPADDING = "3" DATAFLD="RECORD.DELIVERY"> <TR ALIGN = "LEFT"> <TH>Date</TH> <TH>Amount</TH> </TR> <TR ALIGN = "LEFT"> <TD><DIV DATAFLD="DATE"> </DIV></TD> <TD><DIV DATAFLD="TOTAL_COST"> </DIV></TD> </TR> </TABLE> </TD> </TR> </TABLE> </TD> </TR> </TABLE> </CENTER> </BODY> </HTML> You can see the results in Figure 8-8, in which each <DELIVERY> recordset is correctly displayed, even though they all have different numbers of records. Figure 8-8. Variable-size hierarchical records in Internet Explorer.
You can also create the same page using the XML DSO applet instead of data islands: <HTML> <HEAD> <TITLE> Variable Size Hierarchical Records </TITLE> </HEAD> <BODY> <CENTER> <H1> Variable Size Hierarchical Records </H1> <APPLET CODE="com.ms.xml.dso.XMLDSO.class" ID="customers" WIDTH="0" HEIGHT="0" MAYSCRIPT="true"> <PARAM NAME="URL" VALUE="ch08_11.xml"> </APPLET> <TABLE DATASRC="#customers" BORDER="1"> <TR> <TH><DIV DATAFLD="NAME"></DIV></TH> <TD> <TABLE DATASRC="#customers" DATAFLD="RECORD"> <TR ALIGN = CENTER> <TD>Sales</TD> </TR> <TR> . . . </TR> </TABLE> </TD> </TR> </TABLE> </CENTER> </BODY> </HTML> |