xml-purifier 0.1.0
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.
- data/lib/xml-purifier.rb +68 -0
- metadata +55 -0
data/lib/xml-purifier.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# file: xml-purifier.rb
|
4
|
+
|
5
|
+
require 'rexml/document'
|
6
|
+
require 'json'
|
7
|
+
include REXML
|
8
|
+
|
9
|
+
class XMLPurifier
|
10
|
+
|
11
|
+
def initialize(options={})
|
12
|
+
|
13
|
+
# options for to: default, native, cdata, escaped
|
14
|
+
opt = {xml: '', from: 'json', to: 'native'}.merge(options)
|
15
|
+
|
16
|
+
@doc = Document.new(opt[:xml])
|
17
|
+
|
18
|
+
@doc.root.each_recursive do |elem|
|
19
|
+
|
20
|
+
if elem.text and elem.text.to_s[/^[\{\[][^\}\]]+[\}\]]$/] then
|
21
|
+
|
22
|
+
obj = JSON.parse(elem.text)
|
23
|
+
method('to_' + opt[:to].to_s.to_sym).call(elem, obj)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_xml()
|
30
|
+
@doc.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def to_default(elem, obj)
|
36
|
+
node_xml = "<%s>%s</%s>" % [elem.name, scan_obj_to_xml(obj), elem.name]
|
37
|
+
elem.parent.add_element Document.new(node_xml).root
|
38
|
+
elem.parent.delete elem
|
39
|
+
end
|
40
|
+
|
41
|
+
alias to_native to_default
|
42
|
+
|
43
|
+
def to_cdata(elem, obj)
|
44
|
+
s = scan_obj_to_xml(obj)
|
45
|
+
elem.text = CData.new(s)
|
46
|
+
elem.add_element(CData.new(s))
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_escaped(elem, obj) elem.text = scan_obj_to_xml(obj) end
|
50
|
+
|
51
|
+
def string_to_xml(x) x end
|
52
|
+
|
53
|
+
def hash_to_xml(x)
|
54
|
+
x.map do |k,v|
|
55
|
+
k.gsub!(/[^a-zA-Z0-9]/,'_')
|
56
|
+
"<%s>%s</%s>" % [k, scan_obj_to_xml(v), k]
|
57
|
+
end.join
|
58
|
+
end
|
59
|
+
|
60
|
+
def array_to_xml(x)
|
61
|
+
x.map {|v| "<element>%s</element>" % scan_obj_to_xml(v)}.join
|
62
|
+
end
|
63
|
+
|
64
|
+
def scan_obj_to_xml(o)
|
65
|
+
method("%s_to_xml" % o.class.to_s.downcase.to_sym).call(o)
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xml-purifier
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors: []
|
7
|
+
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2011-01-26 00:00:00 +00:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email:
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- lib/xml-purifier.rb
|
26
|
+
has_rdoc: true
|
27
|
+
homepage:
|
28
|
+
licenses: []
|
29
|
+
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: "0"
|
40
|
+
version:
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: "0"
|
46
|
+
version:
|
47
|
+
requirements: []
|
48
|
+
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 1.3.5
|
51
|
+
signing_key:
|
52
|
+
specification_version: 3
|
53
|
+
summary: xml-purifier
|
54
|
+
test_files: []
|
55
|
+
|