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