def self.encode(record, opts={})
singleChar = Regexp.new('[\da-z ]{1}')
ctrlFieldTag = Regexp.new('00[1-9A-Za-z]{1}')
e = REXML::Element.new('record')
e.add_namespace(MARC_NS) if opts[:include_namespace]
record.leader.gsub!(/[^\w|^\s]/, 'Z')
if (record.leader[20..23] != "4500")
record.leader[20..23] = "4500"
end
if (record.leader[6..6] == " ")
record.leader[6..6] = "Z"
end
leader = REXML::Element.new("leader")
leader.add_text(record.leader)
e.add_element(leader)
for field in record.fields
if field.class == MARC::DataField
datafield_elem = REXML::Element.new("datafield")
if field.indicator1.nil? || (field.indicator1.match(singleChar) == nil)
field.indicator1 = 'z'
end
if field.indicator2.nil? || (field.indicator2.match(singleChar) == nil)
field.indicator2 = 'z'
end
datafield_elem.add_attributes({
"tag"=>field.tag,
"ind1"=>field.indicator1,
"ind2"=>field.indicator2
})
for subfield in field.subfields
subfield_element = REXML::Element.new("subfield")
if (subfield.code.match(singleChar) == nil)
subfield.code = ' '
end
subfield_element.add_attribute("code", subfield.code)
text = subfield.value
subfield_element.add_text(text)
datafield_elem.add_element(subfield_element)
end
e.add_element datafield_elem
elsif field.class == MARC::ControlField
control_element = REXML::Element.new("controlfield")
unless field.tag.match(ctrlFieldTag) or MARC::Field.control_tag?(ctrlFieldTag)
field.tag = "00z"
end
control_element.add_attribute("tag", field.tag)
text = field.value
control_element.add_text(text)
e.add_element(control_element)
end
end
return e
end