Perform the following three XPath queries on the XML Document below:

 //item[1]: Retrieve the first "item" element 
 //price/text(): Perform an action on each "price" element (print it out)
 //name: Get an array of all the "name" elements
XML Document:

<inventory title="OmniCorp Store #45x10^3">
  <section name="health">
    <item upc="123456789" stock="12">
      <name>Invisibility Cream</name>
      <price>14.50</price>
      <description>Makes you invisible</description>
    </item>
    <item upc="445322344" stock="18">
      <name>Levitation Salve</name>
      <price>23.99</price>
      <description>Levitate yourself for up to 3 hours per application</description>
    </item>
  </section>
  <section name="food">
    <item upc="485672034" stock="653">
      <name>Blork and Freen Instameal</name>
      <price>4.95</price>
      <description>A tasty meal in a tablet; just add water</description>
    </item>
    <item upc="132957764" stock="44">
      <name>Grob winglets</name>
      <price>3.56</price>
      <description>Tender winglets of Grob. Just add water</description>
    </item>
  </section>
</inventory>

 
use XML;
 
bundle Default {
  class Test {
    function : Main(args : String[]) ~ Nil {
      in := String->New();
      in->Append("<inventory title=\"OmniCorp Store #45x10^3\">");
      in->Append("<section name=\"health\">");
      in->Append("<item upc=\"123456789\" stock=\"12\">");
      in->Append("<name>Invisibility Cream</name>");
      in->Append("<price>14.50</price>");
      in->Append("<description>Makes you invisible</description>");
      in->Append("</item>");
      in->Append("<item upc=\"445322344\" stock=\"18\">");
      in->Append("<name>Levitation Salve</name>");
      in->Append("<price>23.99</price>");
      in->Append("<description>Levitate yourself for up to 3 hours per application</description>");
      in->Append("</item>");
      in->Append("</section>");
      in->Append("<section name=\"food\">");
      in->Append("<item upc=\"485672034\" stock=\"653\">");
      in->Append("<name>Blork and Freen Instameal</name>");
      in->Append("<price>4.95</price>");
      in->Append("<description>A tasty meal in a tablet; just add water</description>");
      in->Append("</item>");
      in->Append("<item upc=\"132957764\" stock=\"44\">");
      in->Append("<name>Grob winglets</name>");
      in->Append("<price>3.56</price>");
      in->Append("<description>Tender winglets of Grob. Just add water</description>");
      in->Append("</item>");
      in->Append("</section>");
      in->Append("</inventory>");
 
      parser := XmlParser->New(in);
      if(parser->Parse()) {
        # get first item
        results := parser->FindElements("//inventory/section[1]/item[1]");
        if(results <> Nil) {
          IO.Console->Instance()->Print("items: ")->PrintLine(results->Size());
        };
        # get all prices
        results := parser->FindElements("//inventory/section/item/price");
        if(results <> Nil) {
          each(i : results) {          
            element := results->Get(i)->As(XMLElement);
            element->GetContent()->PrintLine();
          };
        };
        # get names
        results := parser->FindElements("//inventory/section/item/name");
        if(results <> Nil) {
          IO.Console->Instance()->Print("names: ")->PrintLine(results->Size());
        };
      };
    }
  }
}
 