all tasks
This commit is contained in:
parent
b83f433714
commit
68f8f3e56b
14735 changed files with 178959 additions and 0 deletions
32
Task/XML-XPath/0DESCRIPTION
Normal file
32
Task/XML-XPath/0DESCRIPTION
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
Perform the following three XPath queries on the XML Document below:
|
||||
* Retrieve the first "item" element
|
||||
* Perform an action on each "price" element (print it out)
|
||||
* 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>
|
||||
2
Task/XML-XPath/1META.yaml
Normal file
2
Task/XML-XPath/1META.yaml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
note: XML
|
||||
61
Task/XML-XPath/AppleScript/xml-xpath-1.applescript
Normal file
61
Task/XML-XPath/AppleScript/xml-xpath-1.applescript
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
set theXMLdata to "<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>"
|
||||
|
||||
on getElementValuesByName(theXML, theNameToFind)
|
||||
set R to {}
|
||||
tell application "System Events"
|
||||
repeat with i in theXML
|
||||
set {theName, theElements} to {i's name, i's XML elements}
|
||||
if (count of theElements) > 0 then set R to R & my getElementValuesByName(theElements, theNameToFind)
|
||||
if theName = theNameToFind then set R to R & i's value
|
||||
end repeat
|
||||
end tell
|
||||
return R
|
||||
end getElementValuesByName
|
||||
|
||||
on getBlock(theXML, theItem, theInstance)
|
||||
set text item delimiters to ""
|
||||
repeat with i from 1 to theInstance
|
||||
set {R, blockStart, blockEnd} to {{}, "<" & theItem & space, "</" & theItem & ">"}
|
||||
set x to offset of blockStart in theXML
|
||||
if x = 0 then exit repeat
|
||||
set y to offset of blockEnd in (characters x thru -1 of theXML as string)
|
||||
if y = 0 then exit repeat
|
||||
set R to characters x thru (x + y + (length of blockEnd) - 2) of theXML as string
|
||||
set theXML to characters (y + (length of blockEnd)) thru -1 of theXML as string
|
||||
end repeat
|
||||
return R
|
||||
end getBlock
|
||||
|
||||
tell application "System Events"
|
||||
set xmlData to make new XML data with properties {name:"xmldata", text:theXMLdata}
|
||||
|
||||
return my getBlock(xmlData's text, "item", 1) -- Solution to part 1 of problem.
|
||||
return my getElementValuesByName(xmlData's contents, "name") -- Solution to part 2 of problem.
|
||||
return my getElementValuesByName(xmlData's contents, "price") -- Solution to part 3 of problem.
|
||||
|
||||
end tell
|
||||
9
Task/XML-XPath/AppleScript/xml-xpath-2.applescript
Normal file
9
Task/XML-XPath/AppleScript/xml-xpath-2.applescript
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
"<item upc=\"123456789\" stock=\"12\">
|
||||
<name>Invisibility Cream</name>
|
||||
<price>14.50</price>
|
||||
<description>Makes you invisible</description>
|
||||
</item>"
|
||||
|
||||
{"Invisibility Cream", "Levitation Salve", "Blork and Freen Instameal", "Grob winglets"}
|
||||
|
||||
{"14.50", "23.99", "4.95", "3.56"}
|
||||
12
Task/XML-XPath/AutoHotkey/xml-xpath-1.ahk
Normal file
12
Task/XML-XPath/AutoHotkey/xml-xpath-1.ahk
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
FileRead, inventory, xmlfile.xml
|
||||
|
||||
RegExMatch(inventory, "<item.*?</item>", item1)
|
||||
MsgBox % item1
|
||||
|
||||
pos = 1
|
||||
While, pos := RegExMatch(inventory, "<price>(.*?)</price>", price, pos + 1)
|
||||
MsgBox % price1
|
||||
|
||||
While, pos := RegExMatch(inventory, "<name>.*?</name>", name, pos + 1)
|
||||
names .= name . "`n"
|
||||
MsgBox % names
|
||||
15
Task/XML-XPath/AutoHotkey/xml-xpath-2.ahk
Normal file
15
Task/XML-XPath/AutoHotkey/xml-xpath-2.ahk
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#Include xpath.ahk
|
||||
|
||||
xpath_load(doc, "xmlfile.xml")
|
||||
|
||||
; Retrieve the first "item" element
|
||||
MsgBox % xpath(doc, "/inventory/section[1]/item[1]/text()")
|
||||
|
||||
; Perform an action on each "price" element (print it out)
|
||||
prices := xpath(doc, "/inventory/section/item/price/text()")
|
||||
Loop, Parse, prices,`,
|
||||
reordered .= A_LoopField "`n"
|
||||
MsgBox % reordered
|
||||
|
||||
; Get an array of all the "name" elements
|
||||
MsgBox % xpath(doc, "/inventory/section/item/name")
|
||||
62
Task/XML-XPath/C++/xml-xpath.cpp
Normal file
62
Task/XML-XPath/C++/xml-xpath.cpp
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <boost/regex.hpp>
|
||||
#include <algorithm>
|
||||
#include <iterator>
|
||||
|
||||
int main( ) {
|
||||
const std::string xmltext(
|
||||
"<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>" ) ;
|
||||
std::string::size_type found = xmltext.find( "<item" , 0 ) ; //beginning of first item
|
||||
std::string::size_type foundnext = xmltext.find( "</item>" , found + 5 ) ; //and its end
|
||||
std::cout << "The first item is\n" << xmltext.substr( found + 5 , foundnext - ( found + 5 ) ) << '\n' ;
|
||||
std::string::const_iterator start , end ;
|
||||
start = xmltext.begin( ) ;
|
||||
end = xmltext.end( ) ;
|
||||
boost::match_results<std::string::const_iterator> what ;
|
||||
boost::regex pricefind( "<price>(\\d+\\.?\\d+)</price>" ) ;//this regex finds the prices
|
||||
start = xmltext.begin( ) ;
|
||||
std::cout << "The prices are:\n" ;
|
||||
while ( boost::regex_search( start , end , what , pricefind ) ) {
|
||||
std::string price( what[ 1 ].first , what[ 1 ].second ) ;//find the first price
|
||||
std::cout << price << std::endl ;
|
||||
start = what[ 1 ].second ; //continue search after first price found
|
||||
}
|
||||
start = xmltext.begin( ) ;
|
||||
std::vector<std::string> names ;
|
||||
boost::regex namefind( "<name>(.+?)</name>" ) ; //find characters, be greedy!
|
||||
while ( boost::regex_search ( start , end , what , namefind ) ) {
|
||||
std::string name ( what[ 1 ].first , what[ 1 ].second ) ;
|
||||
names.push_back( name ) ;
|
||||
start = what[ 1 ].second ;
|
||||
}
|
||||
std::cout << "The following name elements were found in the xml string:\n" ;
|
||||
std::copy( names.begin( ) , names.end( ) , std::ostream_iterator<std::string>( std::cout , "\n" )) ;
|
||||
return 0 ;
|
||||
}
|
||||
42
Task/XML-XPath/C-sharp/xml-xpath.cs
Normal file
42
Task/XML-XPath/C-sharp/xml-xpath.cs
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
XmlReader XReader;
|
||||
|
||||
// Either read the xml from a string ...
|
||||
XReader = XmlReader.Create(new StringReader("<inventory title=... </inventory>"));
|
||||
|
||||
// ... or read it from the file system.
|
||||
XReader = XmlReader.Create("xmlfile.xml");
|
||||
|
||||
// Create a XPathDocument object (which implements the IXPathNavigable interface)
|
||||
// which is optimized for XPath operation. (very fast).
|
||||
IXPathNavigable XDocument = new XPathDocument(XReader);
|
||||
|
||||
// Create a Navigator to navigate through the document.
|
||||
XPathNavigator Nav = XDocument.CreateNavigator();
|
||||
Nav = Nav.SelectSingleNode("//item");
|
||||
|
||||
// Move to the first element of the selection. (if available).
|
||||
if(Nav.MoveToFirst())
|
||||
{
|
||||
Console.WriteLine(Nav.OuterXml); // The outer xml of the first item element.
|
||||
}
|
||||
|
||||
// Get an iterator to loop over multiple selected nodes.
|
||||
XPathNodeIterator Iterator = XDocument.CreateNavigator().Select("//price");
|
||||
|
||||
while (Iterator.MoveNext())
|
||||
{
|
||||
Console.WriteLine(Iterator.Current.Value);
|
||||
}
|
||||
|
||||
Iterator = XDocument.CreateNavigator().Select("//name");
|
||||
|
||||
// Use a generic list.
|
||||
List<string> NodesValues = new List<string>();
|
||||
|
||||
while (Iterator.MoveNext())
|
||||
{
|
||||
NodesValues.Add(Iterator.Current.Value);
|
||||
}
|
||||
|
||||
// Convert the generic list to an array and output the count of items.
|
||||
Console.WriteLine(NodesValues.ToArray().Length);
|
||||
21
Task/XML-XPath/ColdFusion/xml-xpath.cfm
Normal file
21
Task/XML-XPath/ColdFusion/xml-xpath.cfm
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<cfsavecontent variable="xmlString">
|
||||
<inventory
|
||||
...
|
||||
</inventory>
|
||||
</cfsavecontent>
|
||||
<cfset xml = xmlParse(xmlString)>
|
||||
<!--- First Task --->
|
||||
<cfset itemSearch = xmlSearch(xml, "//item")>
|
||||
<!--- item = the first Item (xml element object) --->
|
||||
<cfset item = itemSearch[1]>
|
||||
<!--- Second Task --->
|
||||
<cfset priceSearch = xmlSearch(xml, "//price")>
|
||||
<!--- loop and print each price --->
|
||||
<cfloop from="1" to="#arrayLen(priceSearch)#" index="i">
|
||||
#priceSearch[i].xmlText#<br/>
|
||||
</cfloop>
|
||||
<!--- Third Task --->
|
||||
<!--- array of all the name elements --->
|
||||
<cfset names = xmlSearch(xml, "//name")>
|
||||
<!--- visualize the results --->
|
||||
<cfdump var="#variables#">
|
||||
15
Task/XML-XPath/Common-Lisp/xml-xpath.lisp
Normal file
15
Task/XML-XPath/Common-Lisp/xml-xpath.lisp
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
(dolist (system '(:xpath :cxml-stp :cxml))
|
||||
(asdf:oos 'asdf:load-op system))
|
||||
|
||||
(defparameter *doc* (cxml:parse-file "xml" (stp:make-builder)))
|
||||
|
||||
(xpath:first-node (xpath:evaluate "/inventory/section[1]/item[1]" *doc*))
|
||||
|
||||
(xpath:do-node-set (node (xpath:evaluate "/inventory/section/item/price/text()" *doc*))
|
||||
(format t "~A~%" (stp:data node)))
|
||||
|
||||
(defun node-array (node-set)
|
||||
(coerce (xpath:all-nodes node-set) 'vector))
|
||||
|
||||
(node-array
|
||||
(xpath:evaluate "/inventory/section/item/name" *doc*))
|
||||
37
Task/XML-XPath/D/xml-xpath.d
Normal file
37
Task/XML-XPath/D/xml-xpath.d
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
import kxml.xml;
|
||||
char[]xmlinput =
|
||||
"<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>
|
||||
";
|
||||
void main() {
|
||||
auto root = readDocument(xmlinput);
|
||||
auto firstitem = root.parseXPath("inventory/section/item")[0];
|
||||
foreach(price;root.parseXPath("inventory/section/item/price")) {
|
||||
std.stdio.writefln("%s",price.getCData);
|
||||
}
|
||||
auto namearray = root.parseXPath("inventory/section/item/name");
|
||||
}
|
||||
65
Task/XML-XPath/Delphi/xml-xpath-1.delphi
Normal file
65
Task/XML-XPath/Delphi/xml-xpath-1.delphi
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
program XMLXPath;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses ActiveX, MSXML;
|
||||
|
||||
const
|
||||
XML =
|
||||
'<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>';
|
||||
|
||||
var
|
||||
i: Integer;
|
||||
s: string;
|
||||
lXMLDoc: IXMLDOMDocument2;
|
||||
lNodeList: IXMLDOMNodeList;
|
||||
lNode: IXMLDOMNode;
|
||||
lItemNames: array of string;
|
||||
begin
|
||||
CoInitialize(nil);
|
||||
lXMLDoc := CoDOMDocument.Create;
|
||||
lXMLDoc.setProperty('SelectionLanguage', 'XPath');
|
||||
lXMLDoc.loadXML(XML);
|
||||
|
||||
Writeln('First item node:');
|
||||
lNode := lXMLDoc.selectNodes('//item')[0];
|
||||
Writeln(lNode.xml);
|
||||
Writeln('');
|
||||
|
||||
lNodeList := lXMLDoc.selectNodes('//price');
|
||||
for i := 0 to lNodeList.length - 1 do
|
||||
Writeln('Price = ' + lNodeList[i].text);
|
||||
Writeln('');
|
||||
|
||||
lNodeList := lXMLDoc.selectNodes('//item/name');
|
||||
SetLength(lItemNames, lNodeList.length);
|
||||
for i := 0 to lNodeList.length - 1 do
|
||||
lItemNames[i] := lNodeList[i].text;
|
||||
for s in lItemNames do
|
||||
Writeln('Item name = ' + s);
|
||||
end.
|
||||
16
Task/XML-XPath/Delphi/xml-xpath-2.delphi
Normal file
16
Task/XML-XPath/Delphi/xml-xpath-2.delphi
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
First item node:
|
||||
<item upc="123456789" stock="12">
|
||||
<name>Invisibility Cream</name>
|
||||
<price>14.50</price>
|
||||
<description>Makes you invisible</description>
|
||||
</item>
|
||||
|
||||
Price = 14.50
|
||||
Price = 23.99
|
||||
Price = 4.95
|
||||
Price = 3.56
|
||||
|
||||
Item name = Invisibility Cream
|
||||
Item name = Levitation Salve
|
||||
Item name = Blork and Freen Instameal
|
||||
Item name = Grob winglets
|
||||
50
Task/XML-XPath/E/xml-xpath.e
Normal file
50
Task/XML-XPath/E/xml-xpath.e
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
? def xml__quasiParser := <import:org.switchb.e.xml.makeXMLQuasiParser>()
|
||||
> def xpath__quasiParser := xml__quasiParser.xPathQuasiParser()
|
||||
> null
|
||||
|
||||
? def doc := xml`<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>n>
|
||||
> </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>`
|
||||
# value: xml`...`
|
||||
|
||||
? doc[xpath`inventory/section/item`][0]
|
||||
# value: xml`<item stock="12" upc="123456789">
|
||||
# <name>Invisibility Cream</name>
|
||||
# <price>14.50</price>
|
||||
# <description>Makes you invisible</description>
|
||||
# </item>`
|
||||
|
||||
? for price in doc[xpath`inventory/section/item/price/text()`] { println(price :String) }
|
||||
14.50
|
||||
23.99
|
||||
4.95
|
||||
3.56
|
||||
|
||||
? doc[xpath`inventory/section/item/name`]
|
||||
# value: [xml`<name>Invisibility Cream</name>`,
|
||||
# xml`<name>Levitation Salve</name>`,
|
||||
# xml`<name>Blork and Freen Instameal</name>`,
|
||||
# xml`<name>Grob winglets</name>`]
|
||||
4
Task/XML-XPath/Groovy/xml-xpath.groovy
Normal file
4
Task/XML-XPath/Groovy/xml-xpath.groovy
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
def inventory = new XmlSlurper().parseText("<inventory...") //optionally parseText(new File("inv.xml").text)
|
||||
def firstItem = inventory.section.item[0] //1. first item
|
||||
inventory.section.item.price.each { println it } //2. print each price
|
||||
def allNamesArray = inventory.section.item.name.collect {it} //3. collect item names into an array
|
||||
25
Task/XML-XPath/Haskell/xml-xpath-1.hs
Normal file
25
Task/XML-XPath/Haskell/xml-xpath-1.hs
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
import Data.List
|
||||
import Control.Arrow
|
||||
import Control.Monad
|
||||
|
||||
takeWhileIncl :: (a -> Bool) -> [a] -> [a]
|
||||
takeWhileIncl _ [] = []
|
||||
takeWhileIncl p (x:xs)
|
||||
| p x = x : takeWhileIncl p xs
|
||||
| otherwise = [x]
|
||||
|
||||
getmultiLineItem n = takeWhileIncl(not.isInfixOf ("</" ++ n)). dropWhile(not.isInfixOf ('<': n))
|
||||
getsingleLineItems n = map (takeWhile(/='<'). drop 1. dropWhile(/='>')). filter (isInfixOf ('<': n))
|
||||
|
||||
main = do
|
||||
xml <- readFile "./Rosetta/xmlpath.xml"
|
||||
let xmlText = lines xml
|
||||
|
||||
putStrLn "\n== First item ==\n"
|
||||
mapM_ putStrLn $ head $ unfoldr (Just. liftM2 (id &&&) (\\) (getmultiLineItem "item")) xmlText
|
||||
|
||||
putStrLn "\n== Prices ==\n"
|
||||
mapM_ putStrLn $ getsingleLineItems "price" xmlText
|
||||
|
||||
putStrLn "\n== Names ==\n"
|
||||
print $ getsingleLineItems "name" xmlText
|
||||
18
Task/XML-XPath/Haskell/xml-xpath-2.hs
Normal file
18
Task/XML-XPath/Haskell/xml-xpath-2.hs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{-# LANGUAGE Arrows #-}
|
||||
import Text.XML.HXT.Arrow
|
||||
{- For HXT version >= 9.0, use instead:
|
||||
import Text.XML.HXT.Core
|
||||
-}
|
||||
|
||||
deepElem name = deep (isElem >>> hasName name)
|
||||
|
||||
process = proc doc -> do
|
||||
item <- single (deepElem "item") -< doc
|
||||
_ <- listA (arrIO print <<< deepElem "price") -< doc
|
||||
names <- listA (deepElem "name") -< doc
|
||||
returnA -< (item, names)
|
||||
|
||||
main = do
|
||||
[(item, names)] <- runX (readDocument [] "xmlpath.xml" >>> process)
|
||||
print item
|
||||
print names
|
||||
15
Task/XML-XPath/HicEst/xml-xpath-1.hicest
Normal file
15
Task/XML-XPath/HicEst/xml-xpath-1.hicest
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
CHARACTER xml*1000, output*1000
|
||||
READ(ClipBoard) xml
|
||||
|
||||
EDIT(Text=xml, Right='<item', Right=5, GetPosition=a, Right='</item>', Left, GetPosition=z)
|
||||
WRITE(Text=output) xml( a : z), $CRLF
|
||||
|
||||
i = 1
|
||||
1 EDIT(Text=xml, SetPosition=i, SePaRators='<>', Right='<price>', Word=1, Parse=price, GetPosition=i, ERror=99)
|
||||
IF(i > 0) THEN
|
||||
WRITE(Text=output, APPend) 'Price element = ', price, $CRLF
|
||||
GOTO 1 ! HicEst does not have a "WHILE"
|
||||
ENDIF
|
||||
|
||||
EDIT(Text=xml, SPR='<>', R='<name>', W=1, WordEnd=$CR, APpendTo=output, DO=999)
|
||||
WRITE(ClipBoard) TRIM(output)
|
||||
13
Task/XML-XPath/HicEst/xml-xpath-2.hicest
Normal file
13
Task/XML-XPath/HicEst/xml-xpath-2.hicest
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
upc="123456789" stock="12">
|
||||
<name>Invisibility Cream</name>
|
||||
<price>14.50</price>
|
||||
<description>Makes you invisible</description>
|
||||
|
||||
Price element = 14.50
|
||||
Price element = 23.99
|
||||
Price element = 4.95
|
||||
Price element = 3.56
|
||||
Invisibility Cream
|
||||
Levitation Salve
|
||||
Blork and Freen Instameal
|
||||
Grob winglets
|
||||
60
Task/XML-XPath/Java/xml-xpath.java
Normal file
60
Task/XML-XPath/Java/xml-xpath.java
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
import java.io.StringReader;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.xpath.XPath;
|
||||
import javax.xml.xpath.XPathConstants;
|
||||
import javax.xml.xpath.XPathFactory;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
public class XMLParser {
|
||||
final static String xmlStr =
|
||||
"<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 priwater</description>"
|
||||
+ " </item>"
|
||||
+ " </section>"
|
||||
+ "</inventory>";
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
Document doc = DocumentBuilderFactory.newInstance()
|
||||
.newDocumentBuilder()
|
||||
.parse(new InputSource(new StringReader(xmlStr)));
|
||||
XPath xpath = XPathFactory.newInstance().newXPath();
|
||||
// 1
|
||||
System.out.println(((Node) xpath.evaluate(
|
||||
"/inventory/section/item[1]", doc, XPathConstants.NODE))
|
||||
.getAttributes().getNamedItem("upc"));
|
||||
// 2, 3
|
||||
NodeList nodes = (NodeList) xpath.evaluate(
|
||||
"/inventory/section/item/price", doc,
|
||||
XPathConstants.NODESET);
|
||||
for (int i = 0; i < nodes.getLength(); i++)
|
||||
System.out.println(nodes.item(i).getTextContent());
|
||||
} catch (Exception e) {
|
||||
System.out.println("Error ocurred while parsing XML.");
|
||||
}
|
||||
}
|
||||
}
|
||||
23
Task/XML-XPath/JavaScript/xml-xpath-1.js
Normal file
23
Task/XML-XPath/JavaScript/xml-xpath-1.js
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
//create XMLDocument object from file
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', 'file.xml', false);
|
||||
xhr.send(null);
|
||||
var doc = xhr.responseXML;
|
||||
|
||||
//get first <item> element
|
||||
var firstItem = doc.evaluate( '//item[1]', doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
|
||||
alert( firstItem.textContent );
|
||||
|
||||
//output contents of <price> elements
|
||||
var prices = doc.evaluate( '//price', doc, null, XPathResult.ANY_TYPE, null );
|
||||
for( var price = prices.iterateNext(); price != null; price = prices.iterateNext() ) {
|
||||
alert( price.textContent );
|
||||
}
|
||||
|
||||
//add <name> elements to array
|
||||
var names = doc.evaluate( '//name', doc, null, XPathResult.ANY_TYPE, null);
|
||||
var namesArray = [];
|
||||
for( var name = names.iterateNext(); name != null; name = names.iterateNext() ) {
|
||||
namesArray.push( name );
|
||||
}
|
||||
alert( namesArray );
|
||||
21
Task/XML-XPath/JavaScript/xml-xpath-2.js
Normal file
21
Task/XML-XPath/JavaScript/xml-xpath-2.js
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
//create XML object from file
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', 'file.xml', false);
|
||||
xhr.send(null);
|
||||
var doc = new XML(xhr.responseText);
|
||||
|
||||
//get first <item> element
|
||||
var firstItem = doc..item[0];
|
||||
alert( firstItem );
|
||||
|
||||
//output contents of <price> elements
|
||||
for each( var price in doc..price ) {
|
||||
alert( price );
|
||||
}
|
||||
|
||||
//add <name> elements to array
|
||||
var names = [];
|
||||
for each( var name in doc..name ) {
|
||||
names.push( name );
|
||||
}
|
||||
alert( names );
|
||||
44
Task/XML-XPath/Lua/xml-xpath.lua
Normal file
44
Task/XML-XPath/Lua/xml-xpath.lua
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
require 'lxp'
|
||||
data = [[<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>]]
|
||||
local first = true
|
||||
local names, prices = {}, {}
|
||||
p = lxp.new({StartElement = function (parser, name)
|
||||
local a, b, c = parser:pos() --line, offset, pos
|
||||
if name == 'item' and first then
|
||||
print(data:match('.-</item>', c - b + 1))
|
||||
first = false
|
||||
end
|
||||
if name == 'name' then names[#names+1] = data:match('>(.-)<', c) end
|
||||
if name == 'price' then prices[#prices+1] = data:match('>(.-)<', c) end
|
||||
end})
|
||||
|
||||
p:parse(data)
|
||||
p:close()
|
||||
|
||||
print('Name: ', table.concat(names, ', '))
|
||||
print('Price: ', table.concat(prices, ', '))
|
||||
4
Task/XML-XPath/Mathematica/xml-xpath.math
Normal file
4
Task/XML-XPath/Mathematica/xml-xpath.math
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
example = Import["test.txt", "XML"];
|
||||
Cases[example, XMLElement["item", _ , _] , Infinity] // First
|
||||
Cases[example, XMLElement["price", _, List[n_]] -> n, Infinity] // Column
|
||||
Cases[example, XMLElement["name", _, List[n_]] -> n, Infinity] // Column
|
||||
78
Task/XML-XPath/NetRexx/xml-xpath.netrexx
Normal file
78
Task/XML-XPath/NetRexx/xml-xpath.netrexx
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/* NetRexx */
|
||||
options replace format comments java crossref symbols binary
|
||||
|
||||
import javax.xml.parsers.
|
||||
import javax.xml.xpath.
|
||||
import org.w3c.dom.
|
||||
import org.xml.sax.
|
||||
|
||||
xmlStr = '' -
|
||||
|| '<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 priwater</description>' -
|
||||
|| ' </item>' -
|
||||
|| ' </section>' -
|
||||
|| '</inventory>'
|
||||
|
||||
expr1 = '/inventory/section/item[1]'
|
||||
expr2 = '/inventory/section/item/price'
|
||||
expr3 = '/inventory/section/item/name'
|
||||
attr1 = 'upc'
|
||||
|
||||
do
|
||||
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(InputSource(StringReader(xmlStr)))
|
||||
xpath = XPathFactory.newInstance().newXPath()
|
||||
|
||||
-- Extract attribute from 1st item element
|
||||
say expr1
|
||||
say " "(Node xpath.evaluate(expr1, doc, XPathConstants.NODE)).getAttributes().getNamedItem(attr1)
|
||||
say
|
||||
|
||||
-- Extract and display all price elments
|
||||
nodes = NodeList xpath.evaluate(expr2, doc, XPathConstants.NODESET)
|
||||
say expr2
|
||||
loop i_ = 0 to nodes.getLength() - 1
|
||||
say Rexx(nodes.item(i_).getTextContent()).format(10, 2)
|
||||
end i_
|
||||
say
|
||||
|
||||
-- Extract elements and store in an ArrayList
|
||||
nameList = java.util.List
|
||||
nameList = ArrayList()
|
||||
nodes = NodeList xpath.evaluate(expr3, doc, XPathConstants.NODESET)
|
||||
loop i_ = 0 to nodes.getLength() - 1
|
||||
nameList.add(nodes.item(i_).getTextContent())
|
||||
end i_
|
||||
|
||||
-- display contents of ArrayList
|
||||
say expr3
|
||||
loop n_ = 0 to nameList.size() - 1
|
||||
say " "nameList.get(n_)
|
||||
end n_
|
||||
say
|
||||
|
||||
catch ex = Exception
|
||||
ex.printStackTrace()
|
||||
end
|
||||
|
||||
return
|
||||
57
Task/XML-XPath/Objeck/xml-xpath.objeck
Normal file
57
Task/XML-XPath/Objeck/xml-xpath.objeck
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
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());
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
87
Task/XML-XPath/Oz/xml-xpath.oz
Normal file
87
Task/XML-XPath/Oz/xml-xpath.oz
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
declare
|
||||
[XMLParser] = {Module.link ['x-oz://system/xml/Parser.ozf']}
|
||||
|
||||
proc {Main Data}
|
||||
Parser = {New XMLParser.parser init}
|
||||
[Doc] = {Parser parseVS(Data $)}
|
||||
|
||||
FirstItem = {XPath Doc [inventory section item]}.1
|
||||
|
||||
Prices = {XPath Doc [inventory section item price Text]}
|
||||
|
||||
Names = {XPath Doc [inventory section item name]}
|
||||
in
|
||||
{ForAll Prices System.showInfo}
|
||||
end
|
||||
|
||||
%%
|
||||
%% Emulation of some XPath functionality:
|
||||
%%
|
||||
|
||||
fun {XPath Doc Path}
|
||||
P|Pr = Path
|
||||
in
|
||||
Doc.name = P %% assert
|
||||
{FoldL Pr XPathStep [Doc]}
|
||||
end
|
||||
|
||||
fun {XPathStep Elements P}
|
||||
if {IsProcedure P} then
|
||||
{Map Elements P}
|
||||
else
|
||||
{FilteredChildren Elements P}
|
||||
end
|
||||
end
|
||||
|
||||
%% A flat list of all Type-children of all Elements.
|
||||
fun {FilteredChildren Elements Type}
|
||||
{Flatten
|
||||
{Map Elements
|
||||
fun {$ E}
|
||||
{Filter E.children
|
||||
fun {$ X}
|
||||
case X of element(name:!Type ...) then true
|
||||
else false
|
||||
end
|
||||
end}
|
||||
end}}
|
||||
end
|
||||
|
||||
%% PCDATA of an element as a ByteString
|
||||
fun {Text Element}
|
||||
Texts = for Child in Element.children collect:C do
|
||||
case Child of text(data:BS ...) then {C BS} end
|
||||
end
|
||||
in
|
||||
{FoldR Texts ByteString.append {ByteString.make nil}}
|
||||
end
|
||||
|
||||
Data =
|
||||
"<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>"
|
||||
in
|
||||
{Main Data}
|
||||
30
Task/XML-XPath/PHP/xml-xpath.php
Normal file
30
Task/XML-XPath/PHP/xml-xpath.php
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
//PHP5 only example due to changes in XML extensions between version 4 and 5 (Tested on PHP5.2.0)
|
||||
$doc = DOMDocument::loadXML('<inventory title="OmniCorp Store #45x10^3">...</inventory>');
|
||||
//Load from file instead with $doc = DOMDocument::load('filename');
|
||||
$xpath = new DOMXPath($doc);
|
||||
/*
|
||||
1st Task: Retrieve the first "item" element
|
||||
*/
|
||||
$nodelist = $xpath->query('//item');
|
||||
$result = $nodelist->item(0);
|
||||
/*
|
||||
2nd task: Perform an action on each "price" element (print it out)
|
||||
*/
|
||||
$nodelist = $xpath->query('//price');
|
||||
for($i = 0; $i < $nodelist->length; $i++)
|
||||
{
|
||||
//print each price element in the DOMNodeList instance, $nodelist, as text/xml followed by a newline
|
||||
print $doc->saveXML($nodelist->item($i))."\n";
|
||||
}
|
||||
/*
|
||||
3rd Task: Get an array of all the "name" elements
|
||||
*/
|
||||
$nodelist = $xpath->query('//name');
|
||||
//our array to hold all the name elements, though in practice you'd probably not need to do this and simply use the DOMNodeList
|
||||
$result = array();
|
||||
//a different way of iterating through the DOMNodeList
|
||||
foreach($nodelist as $node)
|
||||
{
|
||||
$result[] = $node;
|
||||
}
|
||||
7
Task/XML-XPath/Perl/xml-xpath.pl
Normal file
7
Task/XML-XPath/Perl/xml-xpath.pl
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
use XML::XPath qw();
|
||||
|
||||
my $x = XML::XPath->new('<inventory ... </inventory>');
|
||||
|
||||
[$x->findnodes('//item[1]')->get_nodelist]->[0];
|
||||
print $x->findnodes_as_string('//price');
|
||||
$x->findnodes('//name')->get_nodelist;
|
||||
12
Task/XML-XPath/PicoLisp/xml-xpath.l
Normal file
12
Task/XML-XPath/PicoLisp/xml-xpath.l
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
(load "@lib/xm.l")
|
||||
|
||||
(let Sections (body (in "file.xml" (xml)))
|
||||
(pretty (car (body (car Sections))))
|
||||
(prinl)
|
||||
(for S Sections
|
||||
(for L (body S)
|
||||
(prinl (car (body L 'price))) ) )
|
||||
(make
|
||||
(for S Sections
|
||||
(for L (body S)
|
||||
(link (car (body L 'name))) ) ) ) )
|
||||
18
Task/XML-XPath/Python/xml-xpath.py
Normal file
18
Task/XML-XPath/Python/xml-xpath.py
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# Python has basic xml parsing built in
|
||||
|
||||
from xml.dom import minidom
|
||||
|
||||
xmlfile = file("test3.xml") # load xml document from file
|
||||
xmldoc = minidom.parse(xmlfile).documentElement # parse from file stream or...
|
||||
xmldoc = minidom.parseString("<inventory title="OmniCorp Store #45x10^3">...</inventory>").documentElement # alternatively, parse a string
|
||||
|
||||
# 1st Task: Retrieve the first "item" element
|
||||
i = xmldoc.getElementsByTagName("item") # get a list of all "item" tags
|
||||
firstItemElement = i[0] # get the first element
|
||||
|
||||
# 2nd task: Perform an action on each "price" element (print it out)
|
||||
for j in xmldoc.getElementsByTagName("price"): # get a list of all "price" tags
|
||||
print j.childNodes[0].data # XML Element . TextNode . data of textnode
|
||||
|
||||
# 3rd Task: Get an array of all the "name" elements
|
||||
namesArray = xmldoc.getElementsByTagName("name")
|
||||
10
Task/XML-XPath/R/xml-xpath.r
Normal file
10
Task/XML-XPath/R/xml-xpath.r
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
## Require the XML package you can download from http://www.omegahat.org/RSXML/
|
||||
library("XML")
|
||||
doc <- xmlInternalTreeParse("test3.xml")
|
||||
# 1st Task: Retrieve the first "item" element
|
||||
(firstItemElement <- getNodeSet(doc, "//item")[[1]])
|
||||
# 2nd task: Perform an action on each "price" element (print it out)
|
||||
prices <- sapply(getNodeSet(doc, "//price"), xmlValue)
|
||||
for(i in 1:length(prices)) print(prices[i])
|
||||
# 3rd Task: Get an array of all the "name" elements
|
||||
(namesArray <- sapply(getNodeSet(doc, "//name"), xmlValue))
|
||||
23
Task/XML-XPath/Rascal/xml-xpath-1.rascal
Normal file
23
Task/XML-XPath/Rascal/xml-xpath-1.rascal
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
import lang::xml::DOM;
|
||||
import Prelude;
|
||||
|
||||
public void get_first_item(loc a){
|
||||
D = parseXMLDOM(readFile(a));
|
||||
top-down-break visit(D){
|
||||
case E:element(_,"item",_): return println(xmlPretty(E));
|
||||
};
|
||||
}
|
||||
|
||||
public void print_prices(loc a){
|
||||
D = parseXMLDOM(readFile(a));
|
||||
for(/element(_,"price",[charData(/str p)]) := D)
|
||||
println(p);
|
||||
}
|
||||
|
||||
public list[str] get_names(loc a){
|
||||
D = parseXMLDOM(readFile(a));
|
||||
L = [];
|
||||
for(/element(_,"name",[charData(/str n)]) := D)
|
||||
L += n;
|
||||
return L;
|
||||
}
|
||||
20
Task/XML-XPath/Rascal/xml-xpath-2.rascal
Normal file
20
Task/XML-XPath/Rascal/xml-xpath-2.rascal
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
rascal>get_first_item(|file:///Users/.../Desktop/xmlpath.xml|)
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item stock="12" upc="123456789">
|
||||
<name>Invisibility Cream</name>
|
||||
<price>14.50</price>
|
||||
<description>Makes you invisible</description>
|
||||
</item>
|
||||
|
||||
|
||||
ok
|
||||
|
||||
rascal>print_prices(|file:///Users/.../Desktop/xmlpath.xml|)
|
||||
14.50
|
||||
23.99
|
||||
4.95
|
||||
3.56
|
||||
ok
|
||||
|
||||
rascal>get_names(|file:///Users/.../Desktop/xmlpath.xml|)
|
||||
list[str]: ["Invisibility Cream","Levitation Salve","Blork and Freen Instameal","Grob winglets"]
|
||||
16
Task/XML-XPath/Ruby/xml-xpath.rb
Normal file
16
Task/XML-XPath/Ruby/xml-xpath.rb
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#Example taken from the REXML tutorial (http://www.germane-software.com/software/rexml/docs/tutorial.html)
|
||||
require "rexml/document"
|
||||
include REXML
|
||||
#create the REXML Document from the string (%q is Ruby's multiline string, everything between the two @-characters is the string)
|
||||
doc = Document.new(
|
||||
%q@<inventory title="OmniCorp Store #45x10^3">
|
||||
...
|
||||
</inventory>
|
||||
@
|
||||
)
|
||||
# The invisibility cream is the first <item>
|
||||
invisibility = XPath.first( doc, "//item" )
|
||||
# Prints out all of the prices
|
||||
XPath.each( doc, "//price") { |element| puts element.text }
|
||||
# Gets an array of all of the "name" elements in the document.
|
||||
names = XPath.match( doc, "//name" )
|
||||
80
Task/XML-XPath/Scala/xml-xpath.scala
Normal file
80
Task/XML-XPath/Scala/xml-xpath.scala
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
scala> val xml = <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>
|
||||
xml: scala.xml.Elem =
|
||||
<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>
|
||||
|
||||
scala> val firstItem = xml \\ "item" head
|
||||
firstItem: scala.xml.Node =
|
||||
<item upc="123456789" stock="12">
|
||||
<name>Invisibility Cream</name>
|
||||
<price>14.50</price>
|
||||
<description>Makes you invisible</description>
|
||||
</item>
|
||||
|
||||
scala> xml \\ "price" foreach println
|
||||
<price>14.50</price>
|
||||
<price>23.99</price>
|
||||
<price>4.95</price>
|
||||
<price>3.56</price>
|
||||
|
||||
scala> xml \\ "price" map (_ text) foreach println
|
||||
14.50
|
||||
23.99
|
||||
4.95
|
||||
3.56
|
||||
|
||||
scala> val elements = xml \\ "name" toArray
|
||||
elements: Array[scala.xml.Node] = Array(<name>Invisibility Cream</name>, <name>Levitation Salve</name>, <name>Blork and
|
||||
Freen Instameal</name>, <name>Grob winglets</name>)
|
||||
|
||||
scala> val values = xml \\ "name" map (_ text) toArray
|
||||
values: Array[String] = Array(Invisibility Cream, Levitation Salve, Blork and Freen Instameal, Grob winglets)
|
||||
62
Task/XML-XPath/TUSCRIPT/xml-xpath.tuscript
Normal file
62
Task/XML-XPath/TUSCRIPT/xml-xpath.tuscript
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
$$ MODE TUSCRIPT,{}
|
||||
MODE DATA
|
||||
$$ XML=*
|
||||
<inventory title="OmniCorp Store #45x10³">
|
||||
<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>
|
||||
$$ MODE TUSCRIPT
|
||||
|
||||
FILE = "test.xml"
|
||||
ERROR/STOP CREATE (file,fdf-o,-std-)
|
||||
FILE/ERASE/UTF8 $FILE = xml
|
||||
|
||||
BUILD S_TABLE beg=":<item*>:<name>:<price>:"
|
||||
BUILD S_TABLE end=":</item>:</name>:</price>:"
|
||||
BUILD S_TABLE modifiedbeg=":<name>:<price>:"
|
||||
BUILD S_TABLE modifiedend=":</name>:</price>:"
|
||||
firstitem=names="",countitem=0
|
||||
ACCESS q: READ/STREAM/UTF8 $FILE s,a/beg+t+e/end
|
||||
LOOP
|
||||
READ/EXIT q
|
||||
IF (a=="<name>") names=APPEND(names,t)
|
||||
IF (a=="<price>") PRINT t
|
||||
IF (a.sw."<item") countitem=1
|
||||
IF (countitem==1) THEN
|
||||
firstitem=CONCAT(firstitem,a)
|
||||
firstitem=CONCAT(firstitem,t)
|
||||
firstitem=CONCAT(firstitem,e)
|
||||
IF (e=="</item>") THEN
|
||||
COUNTITEM=0
|
||||
MODIFY ACCESS q s_TABLE modifiedbeg,-,modifiedend
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDLOOP
|
||||
ENDACCESS q
|
||||
ERROR/STOP CLOSE (file)
|
||||
firstitem=EXCHANGE (firstitem,":{2-00} ::")
|
||||
firstitem=INDENT_TAGS (firstitem,-," ")
|
||||
names=SPLIT(names)
|
||||
TRACE *firstitem,names
|
||||
14
Task/XML-XPath/Tcl/xml-xpath.tcl
Normal file
14
Task/XML-XPath/Tcl/xml-xpath.tcl
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# assume $xml holds the XML data
|
||||
package require tdom
|
||||
set doc [dom parse $xml]
|
||||
set root [$doc documentElement]
|
||||
|
||||
set allNames [$root selectNodes //name]
|
||||
puts [llength $allNames] ;# ==> 4
|
||||
|
||||
set firstItem [lindex [$root selectNodes //item] 0]
|
||||
puts [$firstItem @upc] ;# ==> 123456789
|
||||
|
||||
foreach node [$root selectNodes //price] {
|
||||
puts [$node text]
|
||||
}
|
||||
8
Task/XML-XPath/Visual-Basic-.NET/xml-xpath.visual
Normal file
8
Task/XML-XPath/Visual-Basic-.NET/xml-xpath.visual
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
Dim first_item = xml.XPathSelectElement("//item")
|
||||
Console.WriteLine(first_item)
|
||||
|
||||
For Each price In xml.XPathSelectElements("//price")
|
||||
Console.WriteLine(price.Value)
|
||||
Next
|
||||
|
||||
Dim names = (From item In xml.XPathSelectElements("//name") Select item.Value).ToArray
|
||||
30
Task/XML-XPath/XProc/xml-xpath.xproc
Normal file
30
Task/XML-XPath/XProc/xml-xpath.xproc
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<p:pipeline xmlns:p="http://www.w3.org/ns/xproc"
|
||||
name="one-two-three"
|
||||
version="1.0">
|
||||
<p:identity>
|
||||
<p:input port="source">
|
||||
<p:inline>
|
||||
<root>
|
||||
<first/>
|
||||
<prices/>
|
||||
<names/>
|
||||
</root>
|
||||
</p:inline>
|
||||
</p:input>
|
||||
</p:identity>
|
||||
<p:insert match="/root/first" position="first-child">
|
||||
<p:input port="insertion" select="(//item)[1]">
|
||||
<p:pipe port="source" step="one-two-three"/>
|
||||
</p:input>
|
||||
</p:insert>
|
||||
<p:insert match="/root/prices" position="first-child">
|
||||
<p:input port="insertion" select="//price">
|
||||
<p:pipe port="source" step="one-two-three"/>
|
||||
</p:input>
|
||||
</p:insert>
|
||||
<p:insert match="/root/names" position="first-child">
|
||||
<p:input port="insertion" select="//name">
|
||||
<p:pipe port="source" step="one-two-three"/>
|
||||
</p:input>
|
||||
</p:insert>
|
||||
</p:pipeline>
|
||||
19
Task/XML-XPath/XQuery/xml-xpath-1.xquery
Normal file
19
Task/XML-XPath/XQuery/xml-xpath-1.xquery
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
(:
|
||||
1. Retrieve the first "item" element
|
||||
Notice the braces around //item. This evaluates first all item elements and then retrieving the first one.
|
||||
Whithout the braces you get the first item for every section.
|
||||
:)
|
||||
let $firstItem := (//item)[1]
|
||||
|
||||
(: 2. Perform an action on each "price" element (print it out) :)
|
||||
let $price := //price/data(.)
|
||||
|
||||
(: 3. Get an array of all the "name" elements :)
|
||||
let $names := //name
|
||||
|
||||
return
|
||||
<result>
|
||||
<firstItem>{$firstItem}</firstItem>
|
||||
<prices>{$price}</prices>
|
||||
<names>{$names}</names>
|
||||
</result>
|
||||
17
Task/XML-XPath/XQuery/xml-xpath-2.xquery
Normal file
17
Task/XML-XPath/XQuery/xml-xpath-2.xquery
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<result>
|
||||
<firstItem>
|
||||
<item upc="123456789" stock="12">
|
||||
<name>Invisibility Cream</name>
|
||||
<price>14.50</price>
|
||||
<description>Makes you invisible</description>
|
||||
</item>
|
||||
</firstItem>
|
||||
<prices>14.50 23.99 4.95 3.56</prices>
|
||||
<names>
|
||||
<name>Invisibility Cream</name>
|
||||
<name>Levitation Salve</name>
|
||||
<name>Blork and Freen Instameal</name>
|
||||
<name>Grob winglets</name>
|
||||
</names>
|
||||
</result>
|
||||
24
Task/XML-XPath/XSLT/xml-xpath.xslt
Normal file
24
Task/XML-XPath/XSLT/xml-xpath.xslt
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:output method="text" />
|
||||
<xsl:template match="/">
|
||||
|
||||
<!-- 1. first item element -->
|
||||
<xsl:text>
|
||||
The first item element is</xsl:text>
|
||||
<xsl:value-of select="//item[1]" />
|
||||
|
||||
<!-- 2. Print each price element -->
|
||||
<xsl:text>
|
||||
The prices are: </xsl:text>
|
||||
<xsl:for-each select="//price">
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
<xsl:copy-of select="." />
|
||||
</xsl:for-each>
|
||||
|
||||
<!-- 3. Collect all the name elements -->
|
||||
<xsl:text>
|
||||
The names are: </xsl:text>
|
||||
<xsl:copy-of select="//name" />
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
Loading…
Add table
Add a link
Reference in a new issue