<!-- 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. -->
<employees>
  <employee>
    <name>Fred Jones</name>
    <address location="home">
      <street>900 Aurora Ave.</street>
      <city>Seattle</city>
      <state>WA</state>
      <zip>98109</zip>
    </address>
    <address location="work">
      <street>2011 152nd Avenue NE</street>
      <city>Redmond</city>
      <state>WA</state>
      <zip>98052</zip>
    </address>
    <phone location="work">(425)641-9385</phone>
    <phone location="home">(206)441-1695</phone>
    <phone location="mobile">(206)714-2515</phone>
  </employee>
  <employee>
    <name>Sally Smith</name>
    <address location="home">
      <street>1430 Oak Place</street>
      <city>Salem</city>
      <state>OR</state>
      <zip>97125</zip>
    </address>
    <address location="work">
      <street>765 Main St.</street>
      <city>Kaiser</city>
      <state>OR</state>
      <zip>97103</zip>
    </address>
    <phone location="work">(503)264-3856</phone>
    <phone location="home">(503)416-6951</phone>
    <phone location="mobile">(503)214-5152</phone>
  </employee>
</employees>
