-
大家也可以通过手动拼接的方式实现,这个案例是通过第三方实现,因为我的其他相关的文章很多解析也是通过第三方,比较方便,好维护。
-
String encoding = “GBK”;这个是因为我的其他地方解析用的用一套编码格式
-
Leader leader = new LeaderImpl(); leader.unmarshal("00628nam0 2200145 450 ");
这个是手动随意写进去的,因为这个第三方库是会自动更新,本身这个字符串代表的也是这个整个的Marc的特殊含义。只要写的长度符合要求,一些格式和特殊的字符合基本没有什么问题,这个数值最后也会随着传入的值不一样而不一样。具体的各个字段代表什么意思,可以参照给出的图书规范。每个阶段会不一样。
public static String BookToMARCConverter(BmBookList book) throws UnsupportedEncodingException {
String encoding = "GBK";
if (ObjectUtil.isEmpty(book)) return null;
Leader leader = new LeaderImpl();
leader.unmarshal("00628nam0 2200145 450 ");
String s1 = DateUtils.formatToDay(DateUtils.getNowDate(), DateUtils.YYYYMMDDHHMMSS)+".0";
ControlField controlField001 = new ControlFieldImpl("001", "010793493"); // 示例控制号
ControlField controlField005 = new ControlFieldImpl("005", new String(s1.getBytes(encoding), Charset.forName(encoding))); // 示例008字段,需要根据实际情况调整
Record record = new RecordImpl();
// record.setLeader(MarcFactory.newInstance().newLeader());
record.setLeader(leader);
record.addVariableField(controlField001);
record.addVariableField(controlField005);
if (ObjectUtil.isNotEmpty(book.getBoisbnIssn()) || ObjectUtil.isNotEmpty(book.getBoprice())){
DataField isbnField = new DataFieldImpl("010", ' ', ' ');
if (ObjectUtil.isNotEmpty(book.getBoisbnIssn())){
Subfield isbnSubfield = new SubfieldImpl('a',new String( book.getBoisbnIssn().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getBoprice())){
Subfield isbnSubfield = new SubfieldImpl('d',new String( book.getBoprice().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
}
record.addVariableField(isbnField);
}
if (ObjectUtil.isNotEmpty(book.getBolanguage()) ){
DataField isbnField = new DataFieldImpl("101", ' ', ' ');
Subfield isbnSubfield = new SubfieldImpl('a', new String( book.getBolanguage().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
record.addVariableField(isbnField);
}
// if (ObjectUtil.isNotEmpty(book.getBoname()) || ObjectUtil.isNotEmpty(book.getBoauthor()) ||
// ObjectUtil.isNotEmpty(book.getSubtitle()) || ObjectUtil.isNotEmpty(book.getSubtitle()) ||
// ObjectUtil.isNotEmpty(book.getOtherAuthors()) || ObjectUtil.isNotEmpty(book.getCategoryName()) || ObjectUtil.isNotEmpty(book.getCategoryNumber()) ){
DataField isbnField2 = new DataFieldImpl("200", ' ', ' ');
if (ObjectUtil.isNotEmpty(book.getBoname())){
Subfield isbnSubfield = new SubfieldImpl('a', new String(book.getBoname().getBytes(encoding), Charset.forName(encoding)));
isbnField2.addSubfield(isbnSubfield);
}else{
Subfield isbnSubfield = new SubfieldImpl('a', "书名不详");
isbnField2.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getBoauthor())){
String str = book.getBoauthor();
if(ObjectUtil.isNotEmpty(book.getResponsible())){
str += ";"+book.getResponsible();
}
Subfield isbnSubfield = new SubfieldImpl('f', new String(str.getBytes(encoding), Charset.forName(encoding)));
isbnField2.addSubfield(isbnSubfield);
}else if (ObjectUtil.isNotEmpty(book.getResponsible())){
Subfield isbnSubfield = new SubfieldImpl('f', book.getResponsible());
isbnField2.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getSubtitle())){
Subfield isbnSubfield = new SubfieldImpl('e', new String(book.getSubtitle().getBytes(encoding), Charset.forName(encoding)));
isbnField2.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getOtherAuthors())){
Subfield isbnSubfield = new SubfieldImpl('g', book.getOtherAuthors());
isbnField2.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getOtherResponsible())){
Subfield isbnSubfield = new SubfieldImpl('g', book.getOtherResponsible());
isbnField2.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getCategoryNumber())){
Subfield isbnSubfield = new SubfieldImpl('h', book.getCategoryNumber());
isbnField2.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getCategoryName())){
Subfield isbnSubfield = new SubfieldImpl('i', book.getCategoryName());
isbnField2.addSubfield(isbnSubfield);
}
record.addVariableField(isbnField2);
// }else{
// DataField isbnField = new DataFieldImpl("200", ' ', ' ');
// Subfield isbnSubfield = new SubfieldImpl('a', "书名不详");
// isbnField.addSubfield(isbnSubfield);
//
// record.addVariableField(isbnField);
// }
if (ObjectUtil.isNotEmpty(book.getBopublish()) || ObjectUtil.isNotEmpty(book.getBopubDate()) || ObjectUtil.isNotEmpty(book.getPlacePublication())){
DataField isbnField = new DataFieldImpl("210", ' ', ' ');
if (ObjectUtil.isNotEmpty(book.getPlacePublication())){
Subfield isbnSubfield = new SubfieldImpl('a',new String( book.getPlacePublication().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getBopublish())){
Subfield isbnSubfield = new SubfieldImpl('c',new String( book.getBopublish().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getBopubDate())){
Subfield isbnSubfield = new SubfieldImpl('d', book.getBopubDate());
isbnField.addSubfield(isbnSubfield);
}
record.addVariableField(isbnField);
}
if (ObjectUtil.isNotEmpty(book.getPagination()) || ObjectUtil.isNotEmpty(book.getSize()) || ObjectUtil.isNotEmpty(book.getAttachment())){
DataField isbnField = new DataFieldImpl("215", ' ', ' ');
if (ObjectUtil.isNotEmpty(book.getPagination())){
Subfield isbnSubfield = new SubfieldImpl('a',new String( book.getPagination().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getSize())){
Subfield isbnSubfield = new SubfieldImpl('d', new String( book.getSize().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
}
if (ObjectUtil.isNotEmpty(book.getAttachment())){
Subfield isbnSubfield = new SubfieldImpl('e', book.getAttachment());
isbnField.addSubfield(isbnSubfield);
}
record.addVariableField(isbnField);
}
if (ObjectUtil.isNotEmpty(book.getGeneralNotes()) ){
DataField isbnField = new DataFieldImpl("300", ' ', ' ');
Subfield isbnSubfield = new SubfieldImpl('a', new String( book.getGeneralNotes().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
record.addVariableField(isbnField);
}
if (ObjectUtil.isNotEmpty(book.getBoabstract()) ){
DataField isbnField = new DataFieldImpl("330", ' ', ' ');
Subfield isbnSubfield = new SubfieldImpl('a', new String( book.getBoabstract().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
record.addVariableField(isbnField);
}
if (ObjectUtil.isNotEmpty(book.getBosubterm()) ){
DataField isbnField = new DataFieldImpl("606", ' ', ' ');
Subfield isbnSubfield = new SubfieldImpl('a',new String( book.getBosubterm().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
record.addVariableField(isbnField);
}
if (ObjectUtil.isNotEmpty(book.getBoclassNo()) ){
DataField isbnField = new DataFieldImpl("690", ' ', ' ');
Subfield isbnSubfield = new SubfieldImpl('a',new String( book.getBoclassNo().getBytes(encoding), Charset.forName(encoding)));
isbnField.addSubfield(isbnSubfield);
record.addVariableField(isbnField);
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
MarcStreamWriter writer = new MarcStreamWriter(out,encoding);
System.out.println("record");
System.out.println(record.toString());
writer.write(record);
// 输出转换后的 Marc 字符串
String s = new String(out.toByteArray(),encoding);
return s;
}