Class: Metacrunch::Marcxml::Parser
- Inherits:
-
Ox::Sax
- Object
- Ox::Sax
- Metacrunch::Marcxml::Parser
- Defined in:
- lib/metacrunch/marcxml/parser.rb
Defined Under Namespace
Classes: ParsingDone
Instance Method Summary collapse
- #attr(name, value) ⇒ Object
- #end_element(name) ⇒ Object
- #parse(marc_xml, collection_mode: false) ⇒ Object
- #start_element(name) ⇒ Object
- #text(value) ⇒ Object
Instance Method Details
#attr(name, value) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/metacrunch/marcxml/parser.rb', line 53 def attr(name, value) element_name, element_data = @stack[-1] parent_name, parent_data = @stack[-2] if element_name == :controlfield && parent_name == :record element_data[:controlfield].tag = value if name == :tag elsif element_name == :datafield && parent_name == :record element_data[:datafield].tag = value if name == :tag element_data[:datafield].ind1 = value if name == :ind1 element_data[:datafield].ind2 = value if name == :ind2 elsif element_name == :subfield && parent_name == :datafield element_data[:subfield].code = value if name == :code end end |
#end_element(name) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/metacrunch/marcxml/parser.rb', line 35 def end_element(name) element_name, element_data = @stack[-1] parent_name, parent_data = @stack[-2] if element_name == :record @documents << element_data[:document] unless element_data[:document].empty? raise ParsingDone unless @collection_mode elsif element_name == :controlfield && parent_name == :record parent_data[:document].add_controlfield(element_data[:controlfield]) elsif element_name == :datafield && parent_name == :record parent_data[:document].add_datafield(element_data[:datafield]) elsif element_name == :subfield && parent_name == :datafield parent_data[:datafield].add_subfield(element_data[:subfield]) end @stack.pop end |
#parse(marc_xml, collection_mode: false) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/metacrunch/marcxml/parser.rb', line 6 def parse(marc_xml, collection_mode: false) @stack = [] @documents = [] @collection_mode = collection_mode begin Ox.sax_parse(self, marc_xml, convert_special: true) rescue ParsingDone ; end collection_mode ? @documents : @documents.first end |
#start_element(name) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/metacrunch/marcxml/parser.rb', line 18 def start_element(name) @stack << [name, {}] element_name, element_data = @stack[-1] parent_name, parent_data = @stack[-2] if element_name == :record element_data[:document] = Document.new elsif element_name == :controlfield && parent_name == :record element_data[:controlfield] = Document::Controlfield.new elsif element_name == :datafield && parent_name == :record element_data[:datafield] = Document::Datafield.new elsif element_name == :subfield && parent_name == :datafield element_data[:subfield] = Document::Subfield.new end end |
#text(value) ⇒ Object
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/metacrunch/marcxml/parser.rb', line 68 def text(value) element_name, element_data = @stack[-1] parent_name, parent_data = @stack[-2] if element_name == :controlfield && parent_name == :record element_data[:controlfield].value = value elsif element_name == :subfield && parent_name == :datafield element_data[:subfield].value = value end end |