pull,sax,dom解析XML

//pull解析
public class MainActivity extends AppCompatActivity {

    private ListView lv;
    private List<Data> list ;
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获得控件
        lv = (ListView) findViewById(R.id.lv);
        btn = (Button) findViewById(R.id.webbtn);
        //请求数据
        loadData();
        //给btn设置监听
        btn.setOnClickListener(listener);
    }

    //请求数据
    private void loadData() {
        new AsyncTask<String, Void, String>() {

            @Override
            protected String doInBackground(String... strings) {
                try {
                    String path = strings[0];
                    URL url = new URL(path);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    //设置请求方式
                    conn.setRequestMethod("GET");
                    conn.setConnectTimeout(5000);
                    //获得请求码
                    int code = conn.getResponseCode();
                    if (code == 200) {
                        InputStream is = conn.getInputStream();

                        //解析XML
                        XmlPullParser parser = Xml.newPullParser();
                        //设置
                        parser.setInput(is, "utf-8");
                        int type = parser.getEventType();
                        Data data = null;
                        while (type != XmlPullParser.END_DOCUMENT) {
                            if (type == XmlPullParser.START_TAG) {
                                if ("tweets".equals(parser.getName())) {
                                    //初始化集合
                                   list=new ArrayList<Data>();
                                }else if("tweet".equals(parser.getName())){
                                    //初始化对象
                                    data=new Data();
                                } else if("portrait".equals(parser.getName())){
                                    //获得值
                                    String portrait=parser.nextText();
                                    data.setPortrait(portrait);
                                }else if("author".equals(parser.getName())){
                                    String author=parser.nextText();
                                    data.setAuthor(author);
                                }else if("body".equals(parser.getName())){
                                    String body=parser.nextText();
                                    data.setBody(body);
                                }else if("pubDate".equals(parser.getName())){
                                    String pubdate=parser.nextText();
                                    data.setPubDate(pubdate);
                                }else if("imgSmall".equals(parser.getName())){
                                    String imgsmall=parser.nextText();
                                    data.setImgSmall(imgsmall);
                                }
                            }else if(type==XmlPullParser.END_TAG){
                                if("tweet".equals(parser.getName())){
                                    //向集合中添加数据
                                    list.add(data);
                                }
                            }
                            //移动到下一行
                            type = parser.next();
                        }

                    }

                } catch (Exception e) {

                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(String s) {
                //适配数据
                lv.setAdapter(new MyAdapter(MainActivity.this,list));
                //把数据添加到数据库中
                PersonDao dao=new PersonDao(MainActivity.this);
                dao.add(list);
                super.onPostExecute(s);
            }
        }.execute("路径");
    }

//sax解析

自定义一个类

public class SaxHandler extends DefaultHandler {
	
	private List<Book> list;
	private Book book;
	//定义一个标记,记住刚才标签的名字
	private String preType=null;
	
	public List<Book> getBookList(InputStream is,SaxHandler saxhandler){
		//获得sax解析工厂实例
		SAXParserFactory sf=SAXParserFactory.newInstance();
		//获得解析者
		try {
			SAXParser parser=sf.newSAXParser();
			//解析文档
			parser.parse(is, saxhandler);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}
	
	@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.startDocument();
		//解析文档开始时,初始化集合
		list=new ArrayList<Book>();
	}
	
	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		//读取结束时,调用此方法
		super.endDocument();
	}
	
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		super.startElement(uri, localName, qName, attributes);
		if("Book".equals(qName)){
			book=new Book();
		}
		//记住标签名字
		preType=qName;
	}
	
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		// TODO Auto-generated method stub
		//读到标签结束,回调的方法
		if("Book".equals(qName)){
			list.add(book);
		}
		//把标签设为空
		preType=null;
		super.endElement(uri, localName, qName);
		
	}
	
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		//解析文本会执行的方法,获得内容
		String content=new String(ch,start,length);
		//判断是哪一个标签的文本
		if("name".equals(preType)){
			book.setName(content);
		}else if("price".equals(preType)){
			book.setPrice(content);
		}else if("author".equals(preType)){
			book.setAuthor(content);
		}
		super.characters(ch, start, length);
	}
}//此处Bean包省略,自己去写一下就OK了
//主Activity中的操作

public class MainActivity extends Activity {

	private TextView tv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//获得控件
		tv=(TextView)findViewById(R.id.textView1);
		
	}
	//监听方法
	public void btn(View v)
	{
		SaxHandler saxhandler=new SaxHandler();
		try {
			InputStream is=getAssets().open("Books.xml");
			List<Book> list=saxhandler.getBookList(is, saxhandler);
			tv.setText(list+"");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	

}
//dom解析

public class MainActivity extends Activity {
	private static final String TAG = "MainActivity";
	private List<Book> list=new ArrayList<Book>();
	private TextView tv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//调用方法
		domResolver();
		//获得控件
		tv=(TextView)findViewById(R.id.textView1);
	}
	//dom解析xml文档
	public void domResolver()
	{
		//获得dom解析工厂实例
		try {
			DocumentBuilderFactory df=DocumentBuilderFactory.newInstance();
			//获得dom解析者
			DocumentBuilder db=df.newDocumentBuilder();
			//开始解析xml
			//判断sdcard是否存在
			File f=null;
			if(SdcardIsExists())
			{	
				f=new File(Environment.getExternalStorageDirectory(), "Books.xml");
				//开始解析xml
				Document document=db.parse(f);
				//获得Book标签
				NodeList nodelist=document.getElementsByTagName("Book");
				
				//遍历集合
				for(int i=0;i<nodelist.getLength();i++)
				{
					
					//获得节点
					Element element=(Element) nodelist.item(i);
					String name=element.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
					String price=element.getElementsByTagName("price").item(0).getFirstChild().getNodeValue();
					String author=element.getElementsByTagName("author").item(0).getFirstChild().getNodeValue();
					//Log.d(TAG, "书名"+name);
					//封装进对象
					Book book=new Book();
					book.setAuthor(author);
					book.setName(name);
					book.setPrice(price);
					//放进list中
					list.add(book);
					
				}
			}else{
				Toast.makeText(MainActivity.this, "请先插入sd卡", 0).show();
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//判断sdacard是否存在
	public boolean SdcardIsExists()
	{	
		//获得sdcard状态
		String state=Environment.getExternalStorageState();
		if(state.equals(Environment.MEDIA_MOUNTED)){
			return true;
		}else{
			return false;
		}
	}
	//监听
	public void btn(View v)
	{
		tv.setText(list.toString());
	}

}




内容概要:本文详细介绍了扫描单分子定位显微镜(scanSMLM)技术及其在三维超分辨体积成像中的应用。scanSMLM通过电调透镜(ETL)实现快速轴向扫描,结合4f检测系统将不同焦平面的荧光信号聚焦到固定成像面,从而实现快速、大视场的三维超分辨成像。文章不仅涵盖了系统硬件的设计与实现,还提供了详细的软件代码实现,包括ETL控制、3D样本模拟、体积扫描、单分子定位、3D重建和分子聚类分析等功能。此外,文章还比较了循环扫描与常规扫描模式,展示了前者在光漂白效应上的优势,并通过荧光珠校准、肌动蛋白丝、线粒体网络和流感A病毒血凝素(HA)蛋白聚类的三维成像实验,验证了系统的性能和应用潜力。最后,文章深入探讨了HA蛋白聚类与病毒感染的关系,模拟了24小时内HA聚类的动态变化,提供了从分子到细胞尺度的多尺度分析能力。 适合人群:具备生物学、物理学或工程学背景,对超分辨显微成像技术感兴趣的科研人员,尤其是从事细胞生物学、病毒学或光学成像研究的科学家和技术人员。 使用场景及目标:①理解和掌握scanSMLM技术的工作原理及其在三维超分辨成像中的应用;②学习如何通过Python代码实现完整的scanSMLM系统,包括硬件控制、图像采集、3D重建和数据分析;③应用于单分子水平研究细胞内结构和动态过程,如病毒入侵机制、蛋白质聚类等。 其他说明:本文提供的代码不仅实现了scanSMLM系统的完整工作流程,还涵盖了多种超分辨成像技术的模拟和比较,如STED、GSDIM等。此外,文章还强调了系统在硬件改动小、成像速度快等方面的优势,为研究人员提供了从理论到实践的全面指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值