<!-- Copyright 2004 The Apache Software Foundation

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License. -->
<po:purchase-order xmlns:po="http://openuri.org/easypo">
  <po:customer>
    <po:name>David Bau</po:name>
    <po:address>Gladwyne, PA</po:address>
  </po:customer>
  <po:date>2002-09-30T14:16:00-05:00</po:date>
  <po:line-item>
    <po:description>Burnham's Celestial Handbook, Vol 1</po:description>
    <po:per-unit-ounces>5</po:per-unit-ounces>
    <po:price>21.79</po:price>
    <po:quantity>2</po:quantity>
  </po:line-item>
  <po:line-item>
    <po:description>Burnham's Celestial Handbook, Vol 2</po:description>
    <po:per-unit-ounces>5</po:per-unit-ounces>
    <po:price>19.89</po:price>
    <po:quantity>2</po:quantity>
  </po:line-item>
  <po:line-item>
    <po:description>Burnham's Celestial Handbook, Vol 3</po:description>
    <po:per-unit-ounces>5</po:per-unit-ounces>
    <po:price>19.89</po:price>
    <po:quantity>1</po:quantity>
  </po:line-item>
  <po:shipper>
    <po:name>UPS</po:name>
    <po:per-ounce-rate>0.74</po:per-ounce-rate>
  </po:shipper>
</po:purchase-order>
