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>

Class XML.Inventory [ Abstract ]
{
 
XData XMLData
{
<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>
}
 
ClassMethod QueryXMLDoc(Output names As %List) As %Status
{
   // get xml stream from the 'XData' block contained in this class
   Set xdata=##class(%Dictionary.CompiledXData).%OpenId($this_"||XMLData",, .sc)
   If $$$ISERR(sc) Quit sc
   Set sc=##class(%XML.XPATH.Document).CreateFromStream(xdata.Data, .xdoc)
   If $$$ISERR(sc) Quit sc
 
   // retrieve the first 'item' element
   Set sc=xdoc.EvaluateExpression("//section[1]", "item[1]", .res)
 
   // perform an action on each 'price' element (print it out)
   Set sc=xdoc.EvaluateExpression("//price", "text()", .res)
   If $$$ISERR(sc) Quit sc
   For i=1:1:res.Count() {
	   If i>1 Write ", "
	   Write res.GetAt(i).Value
   }
 
   // get an array of all the 'name' elements
   Set sc=xdoc.EvaluateExpression("//item", "name", .res)
   If $$$ISERR(sc) Quit sc
   Set key=""
   Do {
	   Set dom=res.GetNext(.key)
	   If '$IsObject(dom) Quit
	   While dom.Read() {
		   If dom.HasValue Set $List(names, key)=dom.Value
	   }
   } While key'=""
 
   // finished
   Quit $$$OK
}
 
}