wcapi 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/wcapi.rb +1 -1
- data/lib/wcapi/client.rb +0 -6
- data/lib/wcapi/get_location_response.rb +10 -23
- data/lib/wcapi/get_record_response.rb +27 -31
- data/lib/wcapi/open_search_response.rb +32 -59
- data/lib/wcapi/record.rb +1 -1
- data/lib/wcapi/sru_search_response.rb +22 -27
- data/test.rb +2 -2
- metadata +27 -36
- data/lib/wcapi/xpath.rb +0 -151
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e9906f8b18e19ce33ef52b1be30b257ec0bbdeff
|
4
|
+
data.tar.gz: 06b94a957a1719d8d9a4a169ac8a5ec5d4940ae4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9e56ac21e3123c6ec85d76bf229a5d9111c94176eb10f87ceea217e5bfe0bc404a1c205b072cf2f844ee75f599500a3b878e596aabe27dca4804d4f48feb2405
|
7
|
+
data.tar.gz: e7a41dc950e82aa36e2ec7b6c370f6f92b9f6101c4c80a5227cbbcd7c664f53a9dcaf3f68a556088aade9c9171669f49a26a35ea5ba6435b25484e401236aa6f
|
data/lib/wcapi.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
require 'wcapi/xpath'
|
2
1
|
require 'wcapi/client'
|
3
2
|
require 'wcapi/open_search_response'
|
4
3
|
require 'wcapi/get_record_response'
|
5
4
|
require 'wcapi/get_location_response'
|
6
5
|
require 'wcapi/sru_search_response'
|
6
|
+
require 'nokogiri'
|
7
7
|
|
8
8
|
WORLDCAT_OPENSEARCH = 'http://www.worldcat.org/webservices/catalog/search/opensearch'
|
9
9
|
WORLDCAT_SRU = 'http://www.worldcat.org/webservices/catalog/search/sru'
|
data/lib/wcapi/client.rb
CHANGED
@@ -10,7 +10,6 @@ module WCAPI
|
|
10
10
|
# client = WCAPI::Client.new :query => 'query', :format => [atom|rss], :start => [position], :count => [max records], :cformat => [mla|apa], :wskey => [your world cat key
|
11
11
|
# options:
|
12
12
|
# wskey
|
13
|
-
# xmlparser [by default, rexml, but libxml supported]
|
14
13
|
#
|
15
14
|
#
|
16
15
|
# More information can be found at:
|
@@ -26,11 +25,6 @@ module WCAPI
|
|
26
25
|
|
27
26
|
def initialize(options={})
|
28
27
|
@debug = options[:debug]
|
29
|
-
#if defined?(options[:xmlparser]:
|
30
|
-
# @xmlparser = options[:xmlparser]
|
31
|
-
#else
|
32
|
-
# @xmlparser = 'rexml'
|
33
|
-
#end
|
34
28
|
@wskey = options[:wskey]
|
35
29
|
end
|
36
30
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module WCAPI
|
2
2
|
class GetLocationResponse
|
3
|
-
include WCAPI::XPath
|
3
|
+
#include WCAPI::XPath
|
4
4
|
attr_accessor :institutions, :raw
|
5
5
|
|
6
6
|
def initialize(doc)
|
@@ -18,32 +18,19 @@ module WCAPI
|
|
18
18
|
_records = Array.new()
|
19
19
|
_x = 0
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
_parser = LibXML::XML::Parser.new()
|
24
|
-
_parser.string = xml
|
25
|
-
doc = LibXML::XML::Document.new()
|
26
|
-
doc = _parser.parse
|
27
|
-
rescue
|
28
|
-
begin
|
29
|
-
require 'rexml/document'
|
30
|
-
doc = REXML::Document.new(xml)
|
31
|
-
rescue
|
32
|
-
#likely some kind of xml error
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
nodes = xpath_all(doc, "//holding")
|
21
|
+
doc = Nokogiri::XML(xml)
|
22
|
+
nodes = doc.xpath("//holding")
|
37
23
|
nodes.each { |item |
|
38
|
-
_oclc_symbol =
|
24
|
+
_oclc_symbol = item.xpath("institutionIdentifier/value[position()=1]").text
|
39
25
|
|
40
|
-
|
41
|
-
|
26
|
+
if item.xpath("electronicAddress/text") != nil
|
27
|
+
_link = item.xpath("electronicAddress/text[position()=1]").text
|
42
28
|
end
|
29
|
+
|
30
|
+
if item.xpath("holdingSimple/copiesSummary/copiesCount") != nil
|
31
|
+
_copies = item.xpath("holdingSimple/copiesSummary/copiesCount[position()=1]").text
|
32
|
+
end
|
43
33
|
|
44
|
-
if xpath_first(item, "holdingSimple/copiesSummary/copiesCount") != nil
|
45
|
-
_copies = xpath_get_text(xpath_first(item, "holdingSimple/copiesSummary/copiesCount"))
|
46
|
-
end
|
47
34
|
|
48
35
|
_instchash = {:institutionIdentifier => _oclc_symbol, :link => _link, :copies => _copies ,
|
49
36
|
:xml => item.to_s}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module WCAPI
|
2
2
|
class GetRecordResponse
|
3
|
-
include WCAPI::XPath
|
3
|
+
#include WCAPI::XPath
|
4
4
|
attr_accessor :record, :raw
|
5
5
|
|
6
6
|
def initialize(doc)
|
@@ -21,42 +21,38 @@ module WCAPI
|
|
21
21
|
_rechash = {}
|
22
22
|
_x = 0
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
rescue
|
28
|
-
#likely some kind of xml error
|
29
|
-
end
|
30
|
-
|
31
|
-
nodes = xpath_all(doc, "/record")
|
24
|
+
doc = Nokogiri::XML(xml)
|
25
|
+
doc.remove_namespaces!
|
26
|
+
nodes = doc.xpath("/record")
|
32
27
|
puts "NODE Count: " + nodes.length.to_s
|
33
28
|
nodes.each { |item |
|
34
|
-
|
35
|
-
|
36
|
-
if
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
if xpath_first(item, "datafield[@tag='7*']" ) != nil
|
42
|
-
xpath_all(item, "datafield[@tag='7*']/sufield[@code='a']").each { |i|
|
43
|
-
_author.push(xpath_get_text(i))
|
44
|
-
}
|
29
|
+
_title = item.xpath("datafield[@tag='245']/subfield[@code='a'][position()=1]").text
|
30
|
+
|
31
|
+
if item.xpath("datafield[@tag='1*']") != nil
|
32
|
+
item.xpath("datafield[@tag='1*']").each {|i|
|
33
|
+
_author.push(i.xpath("subfield[@code='a']").text)
|
34
|
+
}
|
45
35
|
end
|
46
36
|
|
47
|
-
if
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
37
|
+
if item.xpath("datafield[@tag='7*']") != nil
|
38
|
+
item.xpath("datafield[@tag='7*']").each {|i|
|
39
|
+
_author.push(i.xpath("subfield[@code='a']").text)
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
if item.xpath("controlfield[@tag='001']") != nil
|
44
|
+
_id = item.xpath("controlfield[@tag='001']").text
|
45
|
+
_link = 'http://www.worldcat.org/oclc/' + _id.to_s
|
46
|
+
end
|
47
|
+
|
48
|
+
if item.xpath("datafield[@tag='520']") != nil
|
49
|
+
_summary = item.xpath("datafield[@tag='520']/subfield[@code='a'][position()=1]").text
|
50
|
+
else
|
51
|
+
if item.xpath("datafield[@tag='500']") != nil
|
52
|
+
_summary = item.xpath("datafield[@tag='500']/subfield[@code='a'][position()=1]").text
|
57
53
|
end
|
58
54
|
end
|
59
|
-
|
55
|
+
|
60
56
|
_rechash = {:title => _title, :author => _author, :link => _link, :id => _id, :citation => _citation,
|
61
57
|
:summary => _summary, :xml => item.to_s}
|
62
58
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module WCAPI
|
2
2
|
class OpenSearchResponse
|
3
|
-
include WCAPI::XPath
|
3
|
+
#include WCAPI::XPath
|
4
4
|
attr_accessor :header, :records, :raw
|
5
5
|
|
6
6
|
def initialize(doc)
|
@@ -25,20 +25,7 @@ module WCAPI
|
|
25
25
|
_record = Array.new()
|
26
26
|
_x = 0
|
27
27
|
|
28
|
-
|
29
|
-
require 'xml/libxml'
|
30
|
-
_parser = LibXML::XML::Parser.new()
|
31
|
-
_parser.string = xml
|
32
|
-
doc = LibXML::XML::Document.new()
|
33
|
-
doc = _parser.parse
|
34
|
-
rescue
|
35
|
-
begin
|
36
|
-
require 'rexml/document'
|
37
|
-
doc = REXML::Document.new(xml)
|
38
|
-
rescue
|
39
|
-
#likely some kind of xml error
|
40
|
-
end
|
41
|
-
end
|
28
|
+
doc = Nokogiri::XML(xml)
|
42
29
|
|
43
30
|
namespaces = {'content' => 'http://purl.org/rss/1.0/modules/content/',
|
44
31
|
'atom' => 'http://www.w3.org/2005/Atom',
|
@@ -48,31 +35,31 @@ module WCAPI
|
|
48
35
|
|
49
36
|
|
50
37
|
@header = {}
|
51
|
-
@header["totalResults"] =
|
52
|
-
@header["startIndex"] =
|
53
|
-
@header["itemsPerPage"] =
|
38
|
+
@header["totalResults"] = doc.xpath("//opensearch:totalResults").text
|
39
|
+
@header["startIndex"] = doc.xpath("//opensearch:startIndex").text
|
40
|
+
@header["itemsPerPage"] = doc.xpath("//opensearch:itemsPerPage").text
|
54
41
|
|
55
|
-
nodes =
|
42
|
+
nodes = doc.xpath("//item", namespaces)
|
56
43
|
nodes.each { |item |
|
57
|
-
_title =
|
58
|
-
if
|
59
|
-
|
60
|
-
_author.push(
|
44
|
+
_title = item.xpath("title[position()=1]", namespaces).text
|
45
|
+
if item.xpath("author/name[position()=1]", namespaces) != nil
|
46
|
+
item.xpath("author/name", namespaces).each { |i|
|
47
|
+
_author.push(i.text)
|
61
48
|
}
|
62
49
|
end
|
63
|
-
if
|
64
|
-
_link =
|
50
|
+
if item.xpath("link[position()=1]") != nil
|
51
|
+
_link = item.xpath("link[position()=1]", namespaces).text
|
65
52
|
end
|
66
53
|
|
67
54
|
if _link != ''
|
68
55
|
_id = _link.slice(_link.rindex("/")+1, _link.length-_link.rindex("/"))
|
69
56
|
end
|
70
|
-
if
|
71
|
-
_citation =
|
57
|
+
if item.xpath("content:encoded[position()=1]", namespaces) != nil
|
58
|
+
_citation = item.xpath("content:encoded[position()=1]", namespaces).text
|
72
59
|
end
|
73
60
|
|
74
|
-
if
|
75
|
-
_summary =
|
61
|
+
if item.xpath("description[position()=1]", namespaces) != nil
|
62
|
+
_summary = item.xpath("description[position()=1]", namespaces).text
|
76
63
|
end
|
77
64
|
_rechash = {:title => _title, :author => _author, :link => _link, :id => _id, :citation => _citation,
|
78
65
|
:summary => _summary, :xml => item.to_s}
|
@@ -93,58 +80,44 @@ module WCAPI
|
|
93
80
|
_record = Array.new()
|
94
81
|
_x = 0
|
95
82
|
|
96
|
-
|
97
|
-
require 'xml/libxml'
|
98
|
-
_parser = LibXML::XML::Parser.new()
|
99
|
-
_parser.string = xml
|
100
|
-
doc = LibXML::XML::Document.new()
|
101
|
-
doc = _parser.parse
|
102
|
-
rescue
|
103
|
-
begin
|
104
|
-
require 'rexml/document'
|
105
|
-
doc = REXML::Document.new(xml)
|
106
|
-
rescue
|
107
|
-
#likely some kind of xml error
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
83
|
+
doc = Nokogiri::XML(xml)
|
111
84
|
namespaces = {'n0' => 'http://www.w3.org/2005/Atom',
|
112
85
|
'opensearch' => 'http://a9.com/-/spec/opensearch/1.1/'
|
113
86
|
}
|
114
87
|
|
115
88
|
|
116
89
|
@header = {}
|
117
|
-
@header["totalResults"] =
|
118
|
-
@header["startIndex"] =
|
119
|
-
@header["itemsPerPage"] =
|
90
|
+
@header["totalResults"] = doc.xpath("//opensearch:totalResults").text
|
91
|
+
@header["startIndex"] = doc.xpath("//opensearch:startIndex").text
|
92
|
+
@header["itemsPerPage"] = doc.xpath("//opensearch:itemsPerPage").text
|
120
93
|
|
121
|
-
nodes =
|
94
|
+
nodes = doc.xpath("//*[local-name()='entry']")
|
122
95
|
nodes.each { |item |
|
123
96
|
_author = []
|
124
|
-
_title =
|
125
|
-
_tmpauthor =
|
97
|
+
_title = item.xpath("*[local-name() = 'title'][position()=1]").text
|
98
|
+
_tmpauthor = item.xpath("*[local-name() = 'author'][position()=1]")
|
126
99
|
|
127
100
|
if _tmpauthor != nil
|
128
|
-
if
|
129
|
-
|
130
|
-
_author.push(
|
101
|
+
if item.xpath("*[local-name() = 'author']/*[local-name() = 'name']") != nil
|
102
|
+
item.xpath("*[local-name() = 'author']/*[local-name() = 'name']").each { |i|
|
103
|
+
_author.push(i.text)
|
131
104
|
}
|
132
105
|
end
|
133
106
|
end
|
134
107
|
|
135
|
-
if
|
136
|
-
_link =
|
108
|
+
if item.xpath("*[local-name() = 'id']") != nil
|
109
|
+
_link = item.xpath("*[local-name() = 'id']").text
|
137
110
|
end
|
138
111
|
|
139
112
|
if _link != ''
|
140
113
|
_id = _link.slice(_link.rindex("/")+1, _link.length-_link.rindex("/"))
|
141
114
|
end
|
142
|
-
if
|
143
|
-
_citation =
|
115
|
+
if item.xpath("*[local-name() = 'content']") != nil
|
116
|
+
_citation = item.xpath("*[local-name() = 'content'][position()=1]").text
|
144
117
|
end
|
145
118
|
|
146
|
-
if
|
147
|
-
_summary =
|
119
|
+
if item.xpath("*[local-name() = 'summary']") != nil
|
120
|
+
_summary = item.xpath("*[local-name() = 'summary'][position()=1]").text
|
148
121
|
end
|
149
122
|
_rechash = {:title => _title, :author => _author, :link => _link, :id => _id, :citation => _citation,
|
150
123
|
:summary => _summary, :xml => item.to_s}
|
data/lib/wcapi/record.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module WCAPI
|
2
2
|
class SruSearchResponse
|
3
|
-
include WCAPI::XPath
|
3
|
+
#include WCAPI::XPath
|
4
4
|
attr_accessor :header, :records, :raw
|
5
5
|
|
6
6
|
def initialize(doc)
|
@@ -25,43 +25,38 @@ module WCAPI
|
|
25
25
|
|
26
26
|
xml = xml.gsub('<?xml-stylesheet type="text/xsl" href="/webservices/catalog/xsl/searchRetrieveResponse.xsl"?>', "")
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
@header["numberOfRecords"] = xpath_get_text(xpath_first(doc, "//numberOfRecords"))
|
36
|
-
@header["recordSchema"] = xpath_get_text(xpath_first(doc, "//recordSchema"))
|
37
|
-
@header["nextRecordPosition"] = xpath_get_text(xpath_first(doc, "//nextRecordPosition"))
|
38
|
-
@header["maxiumumRecords"] = xpath_get_text(xpath_first(doc, "//maximumRecords"))
|
39
|
-
@header["startRecord"] = xpath_get_text(xpath_first(doc, "//startRecord"))
|
28
|
+
doc = Nokogiri::XML(xml)
|
29
|
+
doc.remove_namespaces!
|
30
|
+
@header["numberOfRecords"] = doc.xpath("//numberOfRecords").text
|
31
|
+
@header["recordSchema"] = doc.xpath("//recordSchema").text
|
32
|
+
@header["nextRecordPosition"] = doc.xpath("//nextRecordPosition").text
|
33
|
+
@header["maxiumumRecords"] = doc.xpath("//maximumRecords").text
|
34
|
+
@header["startRecord"] = doc.xpath("//startRecord").text
|
40
35
|
|
41
|
-
nodes =
|
36
|
+
nodes = doc.xpath("//records/record/recordData/record")
|
42
37
|
nodes.each { |item |
|
43
|
-
_title =
|
44
|
-
if
|
45
|
-
|
46
|
-
_author.push(
|
38
|
+
_title = item.xpath("datafield[@tag='245']/subfield[@code='a'][position()=1]").text
|
39
|
+
if item.xpath("datafield[@tag='1*']") != nil
|
40
|
+
item.xpath("datafield[@tag='1*']/sufield[@code='a']").each { |i|
|
41
|
+
_author.push(i.text)
|
47
42
|
}
|
48
43
|
end
|
49
|
-
if
|
50
|
-
|
51
|
-
_author.push(
|
44
|
+
if item.xpath("datafield[@tag='7*']") != nil
|
45
|
+
item.xpath("datafield[@tag='7*']/sufield[@code='a']").each { |i|
|
46
|
+
_author.push(i.text)
|
52
47
|
}
|
53
48
|
end
|
54
49
|
|
55
|
-
if
|
56
|
-
_id =
|
50
|
+
if item.xpath("controlfield[@tag='001']") != nil
|
51
|
+
_id = item.xpath("controlfield[@tag='001'][position()=1]").text
|
57
52
|
_link = 'http://www.worldcat.org/oclc/' + _id.to_s
|
58
53
|
end
|
59
54
|
|
60
|
-
if
|
61
|
-
_summary =
|
55
|
+
if item.xpath("datafield[@tag='520']") != nil
|
56
|
+
_summary = item.xpath("datafield[@tag='520']/subfield[@code='a'][position()=1]").text
|
62
57
|
else
|
63
|
-
if
|
64
|
-
_summary =
|
58
|
+
if item.xpath("datafield[@tag='500']") != nil
|
59
|
+
_summary = item.xpath("datafield[@tag='500']/subfield[@code='a'][position()=1]").text
|
65
60
|
end
|
66
61
|
end
|
67
62
|
|
data/test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'wcapi'
|
3
3
|
|
4
|
-
client = WCAPI::Client.new :wskey => '
|
4
|
+
client = WCAPI::Client.new :wskey => '[your_key_here]'
|
5
5
|
|
6
6
|
response = client.OpenSearch(:q=>'building digital libraries', :format=>'atom', :start => '1', :count => '25', :cformat => 'all')
|
7
7
|
|
@@ -44,7 +44,7 @@ puts "\n\n"
|
|
44
44
|
|
45
45
|
puts "\n\n\n"
|
46
46
|
puts "SRU Search Example: " + "\n\n"
|
47
|
-
records = client.SRUSearch(:query => "civil war")
|
47
|
+
records = client.SRUSearch(:query => '"civil war"')
|
48
48
|
puts "Total Records: " + records.header["numberOfRecords"] + "\n"
|
49
49
|
records.records.each {|rec|
|
50
50
|
puts "Title: " + rec[:title] + "\n"
|
metadata
CHANGED
@@ -1,61 +1,52 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: wcapi
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- Terry Reese
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
|
12
|
-
date: 2009-03-12 00:00:00 -07:00
|
13
|
-
default_executable:
|
11
|
+
date: 2014-02-03 00:00:00.000000000 Z
|
14
12
|
dependencies: []
|
15
|
-
|
16
13
|
description:
|
17
|
-
email:
|
14
|
+
email: reese.2179@osu.edu
|
18
15
|
executables: []
|
19
|
-
|
20
16
|
extensions: []
|
21
|
-
|
22
17
|
extra_rdoc_files: []
|
23
|
-
|
24
|
-
|
25
|
-
- lib/wcapi
|
26
|
-
- lib/wcapi/xpath.rb
|
27
|
-
- lib/wcapi/record.rb
|
28
|
-
- lib/wcapi/get_location_response.rb
|
29
|
-
- lib/wcapi/open_search_response.rb
|
18
|
+
files:
|
19
|
+
- lib/wcapi.rb
|
30
20
|
- lib/wcapi/client.rb
|
21
|
+
- lib/wcapi/get_location_response.rb
|
31
22
|
- lib/wcapi/get_record_response.rb
|
23
|
+
- lib/wcapi/open_search_response.rb
|
24
|
+
- lib/wcapi/record.rb
|
32
25
|
- lib/wcapi/sru_search_response.rb
|
33
|
-
-
|
34
|
-
has_rdoc: false
|
26
|
+
- test.rb
|
35
27
|
homepage:
|
28
|
+
licenses:
|
29
|
+
- Public Domain
|
30
|
+
metadata: {}
|
36
31
|
post_install_message:
|
37
32
|
rdoc_options: []
|
38
|
-
|
39
|
-
require_paths:
|
33
|
+
require_paths:
|
40
34
|
- lib
|
41
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
-
requirements:
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
43
37
|
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
-
|
47
|
-
|
48
|
-
requirements:
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
49
42
|
- - ">="
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version:
|
52
|
-
version:
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
53
45
|
requirements: []
|
54
|
-
|
55
46
|
rubyforge_project:
|
56
|
-
rubygems_version:
|
47
|
+
rubygems_version: 2.2.1
|
57
48
|
signing_key:
|
58
|
-
specification_version:
|
49
|
+
specification_version: 4
|
59
50
|
summary: Ruby component for processing the WorldCat API
|
60
|
-
test_files:
|
51
|
+
test_files:
|
61
52
|
- test.rb
|
data/lib/wcapi/xpath.rb
DELETED
@@ -1,151 +0,0 @@
|
|
1
|
-
require 'rexml/xpath'
|
2
|
-
|
3
|
-
module WCAPI
|
4
|
-
module XPath
|
5
|
-
# get all matching nodes
|
6
|
-
def xpath_all(pdoc, path, namespace = '')
|
7
|
-
case parser_type(pdoc)
|
8
|
-
when 'libxml'
|
9
|
-
if namespace!=""
|
10
|
-
return pdoc.find(path, namespace) if pdoc.find(path, namespace)
|
11
|
-
else
|
12
|
-
return pdoc.find(path) if pdoc.find(path)
|
13
|
-
end
|
14
|
-
when 'rexml'
|
15
|
-
if namespace!=""
|
16
|
-
return REXML::XPath.match(pdoc, path, namespace)
|
17
|
-
else
|
18
|
-
return REXML::XPath.match(pdoc, path);
|
19
|
-
end
|
20
|
-
end
|
21
|
-
return []
|
22
|
-
end
|
23
|
-
|
24
|
-
# get first matching node
|
25
|
-
def xpath_first(doc, path, pnamespace = '')
|
26
|
-
begin
|
27
|
-
elements = xpath_all(doc, path, pnamespace)
|
28
|
-
if elements != nil
|
29
|
-
case parser_type(doc)
|
30
|
-
when 'libxml'
|
31
|
-
return elements.first
|
32
|
-
when 'rexml'
|
33
|
-
return elements[0]
|
34
|
-
else
|
35
|
-
return nil
|
36
|
-
end
|
37
|
-
else
|
38
|
-
return nil
|
39
|
-
end
|
40
|
-
rescue
|
41
|
-
return nil
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
# get text for first matching node
|
46
|
-
def xpath(pdoc, path, namespace = '')
|
47
|
-
el = xpath_first(pdoc, path, namespace)
|
48
|
-
return unless el
|
49
|
-
case parser_type(pdoc)
|
50
|
-
when 'libxml'
|
51
|
-
return el.content
|
52
|
-
when 'rexml'
|
53
|
-
return el.text
|
54
|
-
end
|
55
|
-
return nil
|
56
|
-
end
|
57
|
-
|
58
|
-
# get text for element)
|
59
|
-
def xpath_get_text(doc)
|
60
|
-
begin
|
61
|
-
case parser_type(doc)
|
62
|
-
when 'libxml'
|
63
|
-
if doc.text? == false
|
64
|
-
return doc.content
|
65
|
-
else
|
66
|
-
return ""
|
67
|
-
end
|
68
|
-
when 'rexml'
|
69
|
-
if doc.has_text? == true
|
70
|
-
return doc.text
|
71
|
-
else
|
72
|
-
return ""
|
73
|
-
end
|
74
|
-
end
|
75
|
-
rescue
|
76
|
-
return ""
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
# get text for element)
|
81
|
-
def xpath_get_all_text(doc)
|
82
|
-
begin
|
83
|
-
case parser_type(doc)
|
84
|
-
when 'libxml'
|
85
|
-
return doc.content
|
86
|
-
when 'rexml'
|
87
|
-
return doc.text
|
88
|
-
end
|
89
|
-
rescue
|
90
|
-
return nil
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
# get node/element name
|
95
|
-
def xpath_get_name(doc)
|
96
|
-
begin
|
97
|
-
case parser_type(doc)
|
98
|
-
when 'libxml'
|
99
|
-
if doc.name != 'text'
|
100
|
-
return doc.name
|
101
|
-
else
|
102
|
-
return nil
|
103
|
-
end
|
104
|
-
when 'rexml'
|
105
|
-
return doc.name
|
106
|
-
end
|
107
|
-
rescue
|
108
|
-
return nil
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
|
113
|
-
# figure out an attribute
|
114
|
-
def get_attribute(node, attr_name)
|
115
|
-
case node.class.to_s
|
116
|
-
when 'REXML::XML::Element'
|
117
|
-
return node.attribute(attr_name)
|
118
|
-
when 'LibXML::XML::Node'
|
119
|
-
#There has been a method shift between 0.5 and 0.7
|
120
|
-
if defined?(node.property) == nil
|
121
|
-
return node.attributes[attr_name]
|
122
|
-
else
|
123
|
-
if defined?(node[attr_name])
|
124
|
-
return node[attr_name]
|
125
|
-
else
|
126
|
-
return node.property(attr_name)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
return nil
|
131
|
-
end
|
132
|
-
|
133
|
-
private
|
134
|
-
|
135
|
-
# figure out what sort of object we should do xpath on
|
136
|
-
def parser_type(x)
|
137
|
-
case x.class.to_s
|
138
|
-
when 'LibXML::XML::Document'
|
139
|
-
return 'libxml'
|
140
|
-
when 'LibXML::XML::Node'
|
141
|
-
return 'libxml'
|
142
|
-
when 'LibXML::XML::Node::Set'
|
143
|
-
return 'libxml'
|
144
|
-
when 'REXML::Element'
|
145
|
-
return 'rexml'
|
146
|
-
when 'REXML::Document'
|
147
|
-
return 'rexml'
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|