def import(val, *args)
case args[0]
when /^xml:\/\/(.+)/
fn = $1
doc = File.open(fn){|f|f.read}
parser = XMLParser.new()
node = parser.parse(doc)
node.prepare()
XMLDocument.new(node).to_hash
when /^data:\/\/(.+)/
fn = $1
eval(File.open(fn){|f|f.read})
when /^var:(.+)/
eval($1)
when /^yaml:\/\/(.+)/
require 'xtemplate/yaml'
fn = $1
File.open(fn){|f|YAMLDocument.new(f)}
when /^soap:\/\/(.+)/
require 'soap/driver'
args.shift
endpoint = $1
namespace = args.shift
if( namespace =~ /^\s*$/ )
namespace = nil
end
obj = SOAP::Driver.new(nil, nil, namespace, "http://#{endpoint}")
m = args.shift
argv = args.collect{|s| eval_expr(s,val,nil) }
i = -1
obj.addMethod(m, *(argv.collect{ i+=1; "arg" + i.to_s }))
obj.call(m, *argv)
when /^xmlrpc:\/\/(.+)/
require 'xmlrpc/client'
m = args[1]
argv = args[2..-1].collect{|s| eval_expr(s,val,nil) }
client = XMLRPC::Client.new2("http://#{$1}")
client.call(m, *argv)
when /^dbi:(.+)/
require 'dbi'
h = DBI.connect("dbi:#{$1}")
query = args[1..-1].collect{|s|s.gsub(/\#\{(.+)\}/){eval_expr($1,val,nil).to_s }}.join(',')
newval = []
h.execute(query){|sth|
while( r = sth.fetch_hash )
newval.push(r)
end
}
newval
else
eval(args[0])
end
end