XML简明教程第10课 :在C++ XML DSO中使用主/细节特征
什么是主/细节特征? 新的主/细节特征允许你连接到一个分层纪录集的当前记录上,这就意味着你可以把当前纪录的子元素连接到一个截然不同的表中。例如,考虑一下的XML: <orders> <order order_number="2233"> <customer> <name>John Smith</name> <custID>192883</custID> </customer> <item> <name>Fly Swatter</name> <price>9.99</price> </item> </order> <order order_number="2234"> <customer> <name>Marea Angela Castaneda</name> <custID>827145</custID> </customer> <item> <name>Fly Paper</name> <price>15.99</price> </item> </order> <order order_number="2235"> <customer> <name>Amy Jones</name> <custID>998022</custID> </customer> <item> <name>Mosquito Netting</name> <price>38.99</price> </item> </order> </orders> 你可以允许你的用户通过ID来定位订单,并显示(也仅能显示)当前订单上的客户和项目信息,你的用户并不能查看所有订单的信息――仅能查看自己感兴趣的。 如何连接到细节? 连接到层次结构中的底层(细节信息)的关键是了解你的数据的结构,上面的XML在根元素<orders>中含有有三个元素。基于XML DSO所采用的试探法,每一个订单都映射到一个包含"order_number"、 "customer"、 和 "item"等域的行集中。"order_number"列包含"order_number"属性的值,"customer"和"item"列包含指向各自的"customer"和"item" 纪录集的指针。"customer"记录集中包含带有"name"和"custID"域的元素的值,"item"记录集中包含带有"name"和"price"域的元素的值。 这样,在顶层("orders")纪录集中,你可以找到"order_number"的值,然后允许你的用户通过"order_number"定位订单。 <P>ORDER NUMBER: <SPAN DATASRC="#xmlDoc" DATAFLD="order_number"></SPAN></P> 现在再添加几个按钮来帮助用户浏览"orders"纪录集。 <INPUT TYPE=BUTTON value="Previous Order" onclick="xmlDoc.recordset.movePrev ious()"> <INPUT TYPE=BUTTON value="Next Order" onclick="xmlDoc.recordset.moveNext()"> 为了在当前纪录的子元素中检索这个值,创建一张表并把表的 DATASRC 属性设置为"#xmlDoc",就和上面所作的一样,但是这时也要把它的 DATAFLD 属性设置为 "customer"。这是为了告诉表连接到"customer"纪录集中的数据上,而"customer"纪录集由"orders"纪录集中的"customer"域的指针指向。 <TABLE DATASRC="#xmlDoc" DATAFLD="customer" BORDER> <THEAD><TH>NAME</TH><TH>ID</TH></THEAD> <TR> <TD><SPAN DATAFLD="name"></SPAN></TD> <TD><SPAN DATAFLD="custID"></SPAN></TD> </TR> </TABLE> 接着对"item"元素作同样的处理。 <TABLE DATASRC="#xmlDoc" DATAFLD="item" BORDER=1> <THEAD><TR><TH>ITEM</TH><TH>PRICE</TH></TR></THEAD> <TR> <TD><SPAN DATAFLD="name"></SPAN></TD> <TD><SPAN DATAFLD="price"></SPAN></TD> </TR> </TABLE> 现在,当用户点击按钮并移到纪录集中的后一个或前一个纪录时,表中的数据会相应的改变到当前纪录。 |