Sync
This commit is contained in:
parent
6f050a029e
commit
776bba907c
3887 changed files with 59894 additions and 7280 deletions
69
Task/XML-XPath/Cache-ObjectScript/xml-xpath.cos
Normal file
69
Task/XML-XPath/Cache-ObjectScript/xml-xpath.cos
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
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
|
||||
}
|
||||
|
||||
}
|
||||
48
Task/XML-XPath/Erlang/xml-xpath.erl
Normal file
48
Task/XML-XPath/Erlang/xml-xpath.erl
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
-module(xml_xpath).
|
||||
-include_lib("xmerl/include/xmerl.hrl").
|
||||
|
||||
-export([main/0]).
|
||||
|
||||
main() ->
|
||||
XMLDocument =
|
||||
"<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>",
|
||||
{Document,_} = xmerl_scan:string(XMLDocument),
|
||||
|
||||
io:format("First item:\n~s\n",
|
||||
[lists:flatten(
|
||||
xmerl:export_simple(
|
||||
[hd(xmerl_xpath:string("//item[1]", Document))],
|
||||
xmerl_xml, [{prolog, ""}]))]),
|
||||
|
||||
io:format("Prices:\n"),
|
||||
[ io:format("~s\n",[Content#xmlText.value])
|
||||
|| #xmlElement{content = [Content|_]} <- xmerl_xpath:string("//price", Document)],
|
||||
|
||||
io:format("Names:\n"),
|
||||
[ Content#xmlText.value
|
||||
|| #xmlElement{content = [Content|_]} <- xmerl_xpath:string("//name", Document)].
|
||||
47
Task/XML-XPath/Racket/xml-xpath.rkt
Normal file
47
Task/XML-XPath/Racket/xml-xpath.rkt
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#lang at-exp racket
|
||||
|
||||
(define input @~a{
|
||||
<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>})
|
||||
|
||||
(require xml xml/path)
|
||||
|
||||
(define data (xml->xexpr
|
||||
((eliminate-whitespace '(inventory section item))
|
||||
(read-xml/element (open-input-string input)))))
|
||||
|
||||
;; Retrieve the first "item" element
|
||||
(displayln (xexpr->string (se-path* '(item) data)))
|
||||
;; => <name>Invisibility Cream</name>
|
||||
|
||||
;; Perform an action on each "price" element (print it out)
|
||||
(printf "Prices: ~a\n" (string-join (se-path*/list '(item price) data) ", "))
|
||||
;; => Prices: 14.50, 23.99, 4.95, 3.56
|
||||
|
||||
;; Get an array of all the "name" elements
|
||||
(se-path*/list '(item name) data)
|
||||
;; => '("Invisibility Cream" "Levitation Salve" "Blork and Freen Instameal" "Grob winglets")
|
||||
Loading…
Add table
Add a link
Reference in a new issue