Just another update
This commit is contained in:
parent
a25938f123
commit
00a190b0a6
6591 changed files with 94363 additions and 23227 deletions
83
Task/XML-XPath/Factor/xml-xpath.factor
Normal file
83
Task/XML-XPath/Factor/xml-xpath.factor
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
! Get first item element
|
||||
"""<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>""" string>xml "item" deep-tag-named
|
||||
|
||||
! Print out prices
|
||||
"""<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>""" string>xml "price" deep-tags-named [ children>> first ] map
|
||||
|
||||
! Array of all name elements
|
||||
"""<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>""" string>xml "name" deep-tags-named
|
||||
80
Task/XML-XPath/Go/xml-xpath-1.go
Normal file
80
Task/XML-XPath/Go/xml-xpath-1.go
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
type Inventory struct {
|
||||
XMLName xml.Name `xml:"inventory"`
|
||||
Title string `xml:"title,attr"`
|
||||
Sections []struct {
|
||||
XMLName xml.Name `xml:"section"`
|
||||
Name string `xml:"name,attr"`
|
||||
Items []struct {
|
||||
XMLName xml.Name `xml:"item"`
|
||||
Name string `xml:"name"`
|
||||
UPC string `xml:"upc,attr"`
|
||||
Stock int `xml:"stock,attr"`
|
||||
Price float64 `xml:"price"`
|
||||
Description string `xml:"description"`
|
||||
} `xml:"item"`
|
||||
} `xml:"section"`
|
||||
}
|
||||
|
||||
// To simplify main's error handling
|
||||
func printXML(s string, v interface{}) {
|
||||
fmt.Println(s)
|
||||
b, err := xml.MarshalIndent(v, "", "\t")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Println(string(b))
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println("Reading XML from standard input...")
|
||||
|
||||
var inv Inventory
|
||||
dec := xml.NewDecoder(os.Stdin)
|
||||
if err := dec.Decode(&inv); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// At this point, inv is Go struct with all the fields filled
|
||||
// in from the XML data. Well-formed XML input that doesn't
|
||||
// match the specification of the fields in the Go struct are
|
||||
// discarded without error.
|
||||
|
||||
// We can reformat the parts we parsed:
|
||||
//printXML("Got:", inv)
|
||||
|
||||
// 1. Retrieve first item:
|
||||
item := inv.Sections[0].Items[0]
|
||||
fmt.Println("item variable:", item)
|
||||
printXML("As XML:", item)
|
||||
|
||||
// 2. Action on each price:
|
||||
fmt.Println("Prices:")
|
||||
var totalValue float64
|
||||
for _, s := range inv.Sections {
|
||||
for _, i := range s.Items {
|
||||
fmt.Println(i.Price)
|
||||
totalValue += i.Price * float64(i.Stock)
|
||||
}
|
||||
}
|
||||
fmt.Println("Total inventory value:", totalValue)
|
||||
fmt.Println()
|
||||
|
||||
// 3. Slice of all the names:
|
||||
var names []string
|
||||
for _, s := range inv.Sections {
|
||||
for _, i := range s.Items {
|
||||
names = append(names, i.Name)
|
||||
}
|
||||
}
|
||||
fmt.Printf("names: %q\n", names)
|
||||
}
|
||||
18
Task/XML-XPath/Python/xml-xpath-2.py
Normal file
18
Task/XML-XPath/Python/xml-xpath-2.py
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
import xml.etree.ElementTree as ET
|
||||
|
||||
xml = open('inventory.xml').read()
|
||||
doc = ET.fromstring(xml)
|
||||
|
||||
doc = ET.parse('inventory.xml') # or load it directly
|
||||
|
||||
# Note, ElementTree's root is the top level element. So you need ".//" to really start searching from top
|
||||
|
||||
# Return first Item
|
||||
item1 = doc.find("section/item") # or ".//item"
|
||||
|
||||
# Print each price
|
||||
for p in doc.findall("section/item/price"): # or ".//price"
|
||||
print "{0:0.2f}".format(float(p.text)) # could raise exception on missing text or invalid float() conversion
|
||||
|
||||
# list of names
|
||||
names = doc.findall("section/item/name") # or ".//name"
|
||||
15
Task/XML-XPath/Python/xml-xpath-3.py
Normal file
15
Task/XML-XPath/Python/xml-xpath-3.py
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
from lxml import etree
|
||||
|
||||
xml = open('inventory.xml').read()
|
||||
doc = etree.fromstring(xml)
|
||||
|
||||
doc = etree.parse('inventory.xml') # or load it directly
|
||||
|
||||
# Return first item
|
||||
item1 = doc.xpath("//section[1]/item[1]")
|
||||
|
||||
# Print each price
|
||||
for p in doc.xpath("//price"):
|
||||
print "{0:0.2f}".format(float(p.text)) # could raise exception on missing text or invalid float() conversion
|
||||
|
||||
names = doc.xpath("//name") # list of names
|
||||
36
Task/XML-XPath/REXX/xml-xpath-1.rexx
Normal file
36
Task/XML-XPath/REXX/xml-xpath-1.rexx
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/*REXX program to parse various queries on an XML document (from a file)*/
|
||||
iFID='XPATH.XML' /*name of the input XML file(doc)*/
|
||||
$= /*string will contain file's text*/
|
||||
do j=1 while lines(iFID)\==0 /*read the entire file into a str*/
|
||||
$=$ linein(iFID) /*append the line to the $ string*/
|
||||
end /*j*/
|
||||
/* [↓] show 1st ITEM in the doc*/
|
||||
parse var $ '<item ' item "</item>"
|
||||
say center('first item:',length(space(item)),'─') /*show a nice header*/
|
||||
say space(item)
|
||||
/* [↓] show all PRICES in the doc*/
|
||||
prices= /*nullify the list and add to it.*/
|
||||
$$=$ /*start with a fresh copy of doc.*/
|
||||
do until $$='' /* [↓] keep parsing until done. */
|
||||
parse var $$ '<price>' price '</price>' $$
|
||||
prices=prices price /*added the price to the list. */
|
||||
end /*until*/
|
||||
say
|
||||
say center('prices:',length(space(prices)),'─') /*show a nice header*/
|
||||
say space(prices)
|
||||
/* [↓] show all NAMES in the doc*/
|
||||
names.= /*nullify the list and add to it.*/
|
||||
L=length(' names: ') /*maximum length of any one name.*/
|
||||
$$=$ /*start with a fresh copy of doc.*/
|
||||
do #=1 until $$='' /* [↓] keep parsing until done. */
|
||||
parse var $$ '<name>' names.# '</name>' $$
|
||||
L=max(L,length(names.#)) /*used to find the widest name. */
|
||||
end /*#*/
|
||||
|
||||
names.0=#-1 /*adjust the # of names (DO loop)*/
|
||||
say
|
||||
say center('names:',L,'─') /*show a nicely formatted header.*/
|
||||
do k=1 for names.0 /*show all the names in the list.*/
|
||||
say names.k /*show a name from the NAMES list*/
|
||||
end /*k*/
|
||||
exit /*stick a fork in it, we're done.*/
|
||||
34
Task/XML-XPath/REXX/xml-xpath-2.rexx
Normal file
34
Task/XML-XPath/REXX/xml-xpath-2.rexx
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
/*REXX program to parse various queries on an XML document (from a file)*/
|
||||
iFID='XPATH.XML' /*name of the input XML file(doc)*/
|
||||
$= /*string will contain file's text*/
|
||||
do j=1 while lines(iFID)\==0 /*read the entire file into a str*/
|
||||
$=$ linein(iFID) /*append the line to the $ string*/
|
||||
end /*j*/
|
||||
|
||||
call parser 'item', 0 /*go and parse the all ITEMs. */
|
||||
say center('first item:',@L.1,'─') /*show a nicely formatted header.*/
|
||||
say @.1 /*show the first ITEM found. */
|
||||
say
|
||||
|
||||
call parser 'price' /*go and parse all the PRICEs. */
|
||||
say center('prices:',length(@@@),'─') /*show a nicely formatted header.*/
|
||||
say @@@ /*show a list of all the prices. */
|
||||
say
|
||||
|
||||
call parser 'name'
|
||||
say center('names:',@L,'─') /*show a nicely formatted header.*/
|
||||
do k=1 for # /*show all the names in the list.*/
|
||||
say @.k /*show a name from the NAMES list*/
|
||||
end /*k*/
|
||||
exit /*stick a fork in it, we're done.*/
|
||||
/*──────────────────────────────────PARSER subroutine───────────────────*/
|
||||
parser: parse arg yy,tail,,@. @@. @@@; $$=$; @L=9; yb='<'yy; ye='</'yy">"
|
||||
tail=word(tail 1, 1) /*use a tail ">" or not?*/
|
||||
do #=1 until $$='' /*parse complete XML doc*/
|
||||
if tail then parse var $$ (yb) '>' @@.# (ye) $$ /*find meat*/
|
||||
else parse var $$ (yb) @@.# (ye) $$ /* " " */
|
||||
@.#=space(@@.#); @@@=space(@@@ @.#) /*shrink; @@@=list of YY*/
|
||||
@L.#=length(@.#); @L=max(@L,@L.#) /*YY length, max length.*/
|
||||
end /*#*/
|
||||
#=#-1 /*adjust # things found.*/
|
||||
return
|
||||
Loading…
Add table
Add a link
Reference in a new issue