3838@ FluxCommand ("handle-marcxml" )
3939public final class MarcXmlHandler extends DefaultXmlPipe <StreamReceiver > {
4040
41+ public static final String DEFAULT_ATTRIBUTE_MARKER = "" ;
42+
4143 private static final String SUBFIELD = "subfield" ;
4244 private static final String DATAFIELD = "datafield" ;
4345 private static final String CONTROLFIELD = "controlfield" ;
4446 private static final String RECORD = "record" ;
4547 private static final String NAMESPACE = "http://www.loc.gov/MARC21/slim" ;
4648 private static final String LEADER = "leader" ;
4749 private static final String TYPE = "type" ;
50+
51+ private String attributeMarker = DEFAULT_ATTRIBUTE_MARKER ;
4852 private String currentTag = "" ;
4953 private String namespace = NAMESPACE ;
5054 private StringBuilder builder = new StringBuilder ();
@@ -60,6 +64,14 @@ private boolean checkNamespace(final String uri) {
6064 return namespace == null || namespace .equals (uri );
6165 }
6266
67+ public void setAttributeMarker (final String attributeMarker ) {
68+ this .attributeMarker = attributeMarker ;
69+ }
70+
71+ public String getAttributeMarker () {
72+ return attributeMarker ;
73+ }
74+
6375 @ Override
6476 public void startElement (final String uri , final String localName , final String qName , final Attributes attributes ) throws SAXException {
6577 if (SUBFIELD .equals (localName )) {
@@ -75,7 +87,7 @@ else if (CONTROLFIELD.equals(localName)) {
7587 }
7688 else if (RECORD .equals (localName ) && checkNamespace (uri )) {
7789 getReceiver ().startRecord ("" );
78- getReceiver ().literal (TYPE , attributes .getValue (TYPE ));
90+ getReceiver ().literal (attributeMarker + TYPE , attributes .getValue (TYPE ));
7991 }
8092 else if (LEADER .equals (localName )) {
8193 builder = new StringBuilder ();
@@ -87,18 +99,15 @@ else if (LEADER.equals(localName)) {
8799 public void endElement (final String uri , final String localName , final String qName ) throws SAXException {
88100 if (SUBFIELD .equals (localName )) {
89101 getReceiver ().literal (currentTag , builder .toString ().trim ());
90-
91102 }
92103 else if (DATAFIELD .equals (localName )) {
93104 getReceiver ().endEntity ();
94105 }
95106 else if (CONTROLFIELD .equals (localName )) {
96107 getReceiver ().literal (currentTag , builder .toString ().trim ());
97-
98108 }
99109 else if (RECORD .equals (localName ) && checkNamespace (uri )) {
100110 getReceiver ().endRecord ();
101-
102111 }
103112 else if (LEADER .equals (localName )) {
104113 getReceiver ().literal (currentTag , builder .toString ());
0 commit comments