Newbie XML Question

Sarah Reichelt sarahr at genesearch.com.au
Mon Dec 13 18:36:32 EST 2004


Hi Bill,

I think the easiest solution would be to include the register ID in the 
order number and then you can just append the 2 blocks of XML data.
e.g.   <Purchase Date="12/13/2004" Time="14:26:03" 
DateTime="20041213142603" Order="A1">

Cheers,
Sarah

On 14 Dec 2004, at 6:32 am, Bill Marriott wrote:

> Hi Everyone!
>
> I'm just warming up on the Revolution XML library, and I would love 
> the groups's input on how to handle a particular problem I'm trying to 
> figure out.
>
> Hypothetical Scenario:
>
> Bob runs a grocery store with two cash registers. Only one is running 
> at any given time. But sometimes he uses register A and sometimes he 
> uses register B. The registers happen to spit out receipts in XML. The 
> recipts look like this:
>
> <Register Station="A">
>    <Purchase Date="12/13/2004" Time="14:26:03" 
> DateTime="20041213142603" Order="1">
>        <Buyer CustomerID="1234" />
>        <Item UPC="04905004" Price="0.40"/>
>        <Description>Cherry Coca-Cola</Description>
>    </Purchase>
>    <Purchase Date="12/13/2004" Time="14:26:14" 
> DateTime="20041213142614" Order="1">
>        <Buyer CustomerID="1234" />
>        <Item UPC="03424005" Price="0.65"/>
>        <Description>Hershey's Chocolate Bar</Description>
>    </Purchase>
>    <Purchase Date="12/13/2004" Time="15:09:25" 
> DateTime="20041213150925" Order="2">
>        <Buyer CustomerID="4567" />
>        <Item UPC="02880125" Price="6.95"/>
>        <Description>Marlboro Cigarettes</Description>
>    </Purchase>
> </Register>
>
> In other words, Bob had two customers. The first customer bought two 
> items (Order 1), and the second customer bought one item (Order 2).
>
> Each register spits out a tape like this, starting with Order=1 and 
> continuing until the store closes. At the end of the day, Bob would 
> like to feed these tapes into his computer running Revolution and get 
> one "tape" of all his items, re-numbered sequentially.
>
> * Bob can't just tape them together (append them) because the Order 
> numbers would conflict. Each register starts numbering at "1" when the 
> store opens.
> * There will never be overlapping orders; only one cash register is 
> active at any given time. (Bob is a sole proprietor who runs from one 
> to the other.)
>
> My approach to this would be something like this:
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> "on mouseup"
> put tape A into XMLTree called aTree
> put tape B into XMLTree called bTree
> make a new, empty XML tree called combinedTree
>
> put the total number of orders in aTree into aOrders
> put the total number of orders in bTree into bOrders
>
> put 1 into newOrderNumber
> put 1 into aCompare
> put 1 into bCompare
>
> repeat while (aCompare <= aOrders) and (bCompare <= bOrders)
>
>    put the block of purchases related to order aCompare in aTree into 
> aBlock
>    put the block of purchases related to order bCompare in aTree into 
> bBlock
>
>    if the earliest DateTime in aBlock < the earliest DateTime in 
> bBlock, then
>        put aBlock after combinedTree
>        put newOrderNumber into the Order attribute for the Purchase 
> nodes of that block
>        increment newOrderNumber by 1
>        increment aCompare by 1
>    else
>        put bBlock after combinedTree
>        put newOrderNumber into the Order attribute for the Purchase 
> nodes of that block
>        increment newOrderNumber by 1
>        increment bCompare by 1
>    end if
>
>    if aCompare > aOrders then
>        put the rest of bTree after combinedTree
>        exit repeat
>    end if
>
>    if bCompare > bOrders then
>        put the rest of aTree after combinedTree
>        exit repeat
>    end if
>
> end repeat
> write out combinedTree
> "end mouseup"
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Ok, so I hope my "FunkyTalk" hyperscripting isn't too obscure.
>
> The problem is, I don't know how to manipulate blocks of XML like 
> this. Do I have to convert the whole XML file into some kind of table 
> first? Do I have to walk through each and every node and every 
> attribute? Is there nothing like "sort lines of foobar ascending by 
> item 5 of each?" Actually, I don't even know how to walk through the 
> nodes since the functions only seem to return the first instance...
>
> I really would like to do something like select/extract all the 
> Purchases where the Order ID = n and bring along all the related 
> attributed and child elements. But I haven't a clue how to do that.
>
> I've gotten as far as I have through reading the "XML Demo 1" stack 
> and "XML construction kit" but I've hit a wall now. Some helpful 
> advice would be very welcome... and posisbly helpful for other XML 
> newbies on the list.
>
> Bill
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/use-revolution
>
>
>



More information about the use-livecode mailing list