70 lines
1.9 KiB
Plaintext
70 lines
1.9 KiB
Plaintext
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
|
|
}
|
|
|
|
}
|