Handling Variable-Size Hierarchical Data in XML Documents

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.

graphics/08fig08.gif

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> 


Real World XML
Real World XML (2nd Edition)
ISBN: 0735712867
EAN: 2147483647
Year: 2005
Pages: 440
Authors: Steve Holzner

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net