📄 embltransform.java
字号:
package textTransform;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.sax.SAXSource;
import java.io.*;
import java.net.URL;
import java.util.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class EMBLTransform implements XMLReader
{
private ContentHandler contentHandler = null;
AttributesImpl attribs = new AttributesImpl();
String namespaceURI = "";
private char[] myChArray = new char[255];
public final static String ID="ID";
public final static String DT="DT";
public final static String DE="DE";
public final static String AC="AC";
public final static String SV="SV";
public final static String KW="KW";
public final static String OS="OS";
public final static String OC="OC";
public final static String RN="RN";
public final static String RA="RA";
public final static String RT="RT";
public final static String RL="RL";
public final static String RX="RX";
public final static String RC="RC";
public final static String RP="RP";
public final static String CC="CC";
public final static String DR="DR";
public final static String FH="FH";
public final static String FT="FT";
public final static String SQ="SQ";
public final static String source="source";
public final static String CDS="CDS";
public final static String exon="exon";
public final static String intron="intron";
public final static String gap="gap";
public final static String polyA_signal="polyA_signal";
public void parse(InputSource source) throws IOException, SAXException
{
InputStream is = source.getByteStream();
InputStreamReader istreamreader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(istreamreader);
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = br.readLine()) != null)
{
buffer.append(line+"\n");
}
if(buffer!=null){
contentHandler.startDocument();
contentHandler.startElement(namespaceURI, "Service", "Service", attribs);
String[] EMBLelements = buffer.toString().split("XX\n");
int numberOfEMBL = EMBLelements.length;
//System.out.print(numberOfEMBL);
for(int i=0; i<numberOfEMBL;i++) {
readEMBL(EMBLelements[i]);
}
contentHandler.endDocument();
}
}
private void readEMBL(String _EMBLelements)
throws SAXException, IOException {
char[] id = _EMBLelements.substring(0,1).toCharArray();
switch(id[0]){
case 'I': readSimple(_EMBLelements);break;
case 'D': readSimple(_EMBLelements);break;
case 'A': readSimple(_EMBLelements);break;
//case 'S': readSimple(_EMBLelements);break;
case 'K': readSimple(_EMBLelements);break;
case 'O': readOR(_EMBLelements);break;
case 'R': readOR(_EMBLelements);break;
case 'C': readSimple(_EMBLelements);break;
case 'F': readF(_EMBLelements);break;
case 'S': readSQ(_EMBLelements);break;
}
}
private void readSimple(String _EMBLelements)
throws SAXException, IOException {
String[] simpleElement = _EMBLelements.split("\n");
String id = _EMBLelements.substring(0,5).trim();
String data = new String();
int length=simpleElement.length;
//System.out.print(length);
for(int i=0;i<length;i++)
{
String dataSimple = simpleElement[i].substring(5).trim();
data=data+" "+dataSimple;
}
contentHandler.startElement(namespaceURI, id, id, attribs);
contentHandler.characters(data.toCharArray(), 0, data.length());
contentHandler.endElement(namespaceURI, id, id);
}
private void readOR(String _EMBLelements)
throws SAXException, IOException {
String[] simpleElement = _EMBLelements.split("\n");
String[] id=new String[255];
int j=0;
id[j]= simpleElement[0].trim().substring(0,2);
String data ="";
int i;
String dataSimple = simpleElement[0].trim().substring(5).trim();
data=data+" "+dataSimple;
for(i=1;i<simpleElement.length;i++)
{
if(!simpleElement[i].trim().substring(0,2).equals(id[j]))
{
sendSimpleElement(id[j],data);
data="";
j=j+1;
id[j] = simpleElement[i].trim().substring(0,2);
}
dataSimple = simpleElement[i].trim().substring(5).trim();
data=(data+" "+dataSimple).trim();
}
sendSimpleElement(id[j],data);
}
private void readF(String _EMBLelements)
throws SAXException, IOException {
String[] simpleElement = _EMBLelements.split("\n");
//FH
String idfh = simpleElement[0].substring(0,2);
contentHandler.startElement(namespaceURI, idfh, idfh, attribs);
readSimple(simpleElement[0].substring(5));
contentHandler.endElement(namespaceURI, idfh, idfh);
//FT
String idft = simpleElement[2].substring(0,2);
contentHandler.startElement(namespaceURI, idft, idft, attribs);
String FTdata= _EMBLelements.substring(_EMBLelements.indexOf("FT"));
readFT(FTdata);
contentHandler.endElement(namespaceURI, idft, idft);
}
private void readFT(String _FTdata)
throws SAXException, IOException {
String[] ftElement = _FTdata.split("FT");
String[] id=new String[255];
String[] ids=new String[255];
int j=0,m=0;
id[j]=ftElement[1].substring(5,18).trim();
String data ="";
contentHandler.startElement(namespaceURI, id[j], id[j], attribs);
data=data+ftElement[1].substring(19).trim();
for(int i=2; i<ftElement.length; i++)
{
if(ftElement[i].trim().substring(0,1).equals("/"))
{
String[] FTselement = ftElement[i].substring(20).trim().split("=");
m=m+1;
ids[m]=FTselement[0];
data=FTselement[1];
if(i==ftElement.length-1||ftElement[i+1].trim().substring(0,1).equals("/") || !ftElement[i+1].substring(5,18).trim().equals(""))
{
sendSimpleElement(ids[m],data);
data="";
}
}
else if(ftElement[i].substring(5,18).trim().equals(""))
{
data=data+ftElement[i].substring(19).trim();
if(ftElement[i+1].trim().substring(0,1).equals("/") || !ftElement[i+1].substring(5,18).trim().equals(""))
{
sendSimpleElement(ids[m],data);
data="";
}
}
else
{
contentHandler.endElement(namespaceURI, id[j], id[j]);
j=j+1;
data=ftElement[i].substring(19).trim();
id[j]=ftElement[i].substring(3,15).trim();
contentHandler.startElement(namespaceURI, id[j], id[j], attribs);
if(ftElement[i+1].trim().substring(0,1).equals("/") || !ftElement[i+1].substring(5,18).trim().equals(""))
{
sendSimpleElement("location",ftElement[i].substring(19).trim());
data="";
}
}
}
contentHandler.endElement(namespaceURI, id[j], id[j]);
}
private void readSQ(String _EMBLelements)
throws SAXException, IOException {
String[] simpleElement = _EMBLelements.split("\n");
String data = simpleElement[0].substring(14).trim();
sendSimpleElement("Sequence",data);
data="\n";
for(int i=1;i<simpleElement.length-1;i++)
{
String dataSimple = simpleElement[i].substring(0,70).trim();
data=(data+" "+dataSimple).trim();
}
sendSimpleElement("SQ",data);
}
private void sendSimpleElement(String _elemName, String _elemValue) throws SAXException {
contentHandler.startElement(namespaceURI, _elemName, _elemName, attribs);
contentHandler.characters(_elemValue.toCharArray(), 0, _elemValue.length());
contentHandler.endElement(namespaceURI, _elemName, _elemName);
}
public void parse(String uri)
{
}
public void setContentHandler(ContentHandler handler)
{
contentHandler = handler;
}
public ContentHandler getContentHandler()
{
return contentHandler;
}
public boolean getFeature(String s)
{
return false;
}
public void setFeature(String s, boolean b)
{
}
public Object getProperty(String s)
{
return null;
}
public void setProperty(String s, Object o)
{
}
public void setEntityResolver(EntityResolver e)
{
}
public EntityResolver getEntityResolver()
{
return null;
}
public void setDTDHandler(DTDHandler d)
{
}
public DTDHandler getDTDHandler()
{
return null;
}
public void setErrorHandler(ErrorHandler handler)
{
}
public ErrorHandler getErrorHandler()
{
return null;
}
//===========================================================
// Main method
//===========================================================
public static void main(String[] args) throws Exception
{
// construct SAXSource with our custom XMLReader
FileInputStream fis = null;
try {
fis = new FileInputStream("AB046566(EMBL).txt");
} catch(FileNotFoundException fnfe) {
System.out.println("Input source file not found.");
}
InputSource inputSource = new InputSource(fis);
XMLReader parser = new EMBLTransform();
SAXSource saxSource = new SAXSource(parser, inputSource);
// construct a transformer using the generic stylesheet
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource xslSource = new StreamSource("generic.xsl");
Transformer transformer = factory.newTransformer(xslSource);
// transform the SAXSource to the result
StreamResult result = new StreamResult("properties.xml");
transformer.transform( saxSource, result);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -