Class | WSDL::Parser |
In: |
lib/wsdl/parser.rb
|
Parent: | Object |
# File lib/wsdl/parser.rb, line 52 52: def initialize(opt = {}) 53: @parser = XSD::XMLParser.create_parser(self, opt) 54: @parsestack = nil 55: @lastnode = nil 56: @ignored = {} 57: @location = opt[:location] 58: @originalroot = opt[:originalroot] 59: end
# File lib/wsdl/parser.rb, line 88 88: def characters(text) 89: lastframe = @parsestack.last 90: if lastframe 91: # Need not to be cloned because character does not have attr. 92: ns = lastframe.ns 93: decode_text(ns, text) 94: else 95: p text if $DEBUG 96: end 97: end
# File lib/wsdl/parser.rb, line 99 99: def end_element(name) 100: lastframe = @parsestack.pop 101: unless name == lastframe.name 102: raise UnexpectedElementError.new("closing element name '#{name}' does not match with opening element '#{lastframe.name}'") 103: end 104: decode_tag_end(lastframe.ns, lastframe.node) 105: @lastnode = lastframe.node 106: end
# File lib/wsdl/parser.rb, line 61 61: def parse(string_or_readable) 62: @parsestack = [] 63: @lastnode = nil 64: @textbuf = '' 65: @parser.do_parse(string_or_readable) 66: @lastnode 67: end
# File lib/wsdl/parser.rb, line 73 73: def start_element(name, attrs) 74: lastframe = @parsestack.last 75: ns = parent = nil 76: if lastframe 77: ns = lastframe.ns.clone_ns 78: parent = lastframe.node 79: else 80: ns = XSD::NS.new 81: parent = nil 82: end 83: attrs = XSD::XMLParser.filter_ns(ns, attrs) 84: node = decode_tag(ns, name, attrs, parent) 85: @parsestack << ParseFrame.new(ns, name, node) 86: end
# File lib/wsdl/parser.rb, line 110 110: def decode_tag(ns, name, attrs, parent) 111: o = nil 112: elename = ns.parse(name) 113: if !parent 114: if elename == DefinitionsName 115: o = Definitions.parse_element(elename) 116: o.location = @location 117: else 118: raise UnknownElementError.new("unknown element: #{elename}") 119: end 120: o.root = @originalroot if @originalroot # o.root = o otherwise 121: else 122: if elename == XMLSchema::AnnotationName 123: # only the first annotation element is allowed for each xsd element. 124: o = XMLSchema::Annotation.new 125: else 126: o = parent.parse_element(elename) 127: end 128: unless o 129: unless @ignored.key?(elename) 130: warn("ignored element: #{elename}") 131: @ignored[elename] = elename 132: end 133: o = Documentation.new # which accepts any element. 134: end 135: # node could be a pseudo element. pseudo element has its own parent. 136: o.root = parent.root 137: o.parent = parent if o.parent.nil? 138: end 139: attrs.each do |key, value| 140: attr_ele = ns.parse(key, true) 141: value_ele = ns.parse(value, true) 142: value_ele.source = value # for recovery; value may not be a QName 143: unless o.parse_attr(attr_ele, value_ele) 144: unless @ignored.key?(attr_ele) 145: warn("ignored attr: #{attr_ele}") 146: @ignored[attr_ele] = attr_ele 147: end 148: end 149: end 150: o 151: end
# File lib/wsdl/parser.rb, line 153 153: def decode_tag_end(ns, node) 154: node.parse_epilogue 155: end