为什么80%的码农都做不了架构师?>>>   

支持任意级深度的xml,通过taglist.get(length)来获取结点值,通过taglist.size()来获取xml结点的深度

package com.nt.demo.xml;import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;public class ORDER_Product_Handler extends DefaultHandler {public StringBuffer sb_text = new StringBuffer();private List<String> taglist = new ArrayList<String>();public List<String> attach = new ArrayList<String>();public List<String> attachments = new ArrayList<String>();public void startDocument() throws SAXException {System.out.println("-------order xml begin----------");// ------gen html------sb_text.append("<html><head></head><style type=\"text/css\">body,td,th {font-size: 12px;}</style><body>");// ---------add on 2012.03.09----------sb_text.append("<table width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"1\">");sb_text.append("<tr bgcolor=\"#99CCFF\">");// sb_text.append("<td><a href=\"htzl\">订单资料</a></td>");// sb_text.append("<td bgcolor=\"#ffffff\">成本估算</td>");sb_text.append("<td><a href=\"order_ddzl\">订单资料</a></td>");sb_text.append("<td bgcolor=\"#ffffff\">产品资料</td>");sb_text.append("</tr>");sb_text.append("</table>");// ------------------------------sb_text.append("<table width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"1\">");}public void endDocument() throws SAXException {System.out.println("----------order xml end---------");// ------gen html------sb_text.append("</table><br/>");sb_text.append("</body></html>");}public void startElement(String namespaceURI, String localName,String qName, Attributes attr) throws SAXException {System.out.println("start element:" + localName);// 把tag加到taglist中以便使用taglist.add(localName);//System.out.println(String.format("taglist.size():%s,localName:%s",taglist.size(), localName));if (taglist.size() >= 2) {if (localName.equals("line")) {// <line Seq="1" ProcuctDesc="" ProcuctType="" Vender=""// Price="" Quantity="" Psum="" Mdate1="" Mdate2="" MPeriod=""/>// 判断父节点标签// 获取标签的全部属性for (int i = 0; i < attr.getLength(); i++) {System.out.println(attr.getLocalName(i) + "="+ attr.getValue(i));sb_text.append("<tr><td bgcolor=\"#99CCFF\">&nbsp;");// sb_text.append(attr.getLocalName(i));if (attr.getLocalName(i).equalsIgnoreCase("Seq")) {sb_text.append("序号");} else if (attr.getLocalName(i).equalsIgnoreCase("ProcuctDesc")) {sb_text.append("产品摘要");} else if (attr.getLocalName(i).equalsIgnoreCase("ProcuctType")) {sb_text.append("类别");} else if (attr.getLocalName(i).equalsIgnoreCase("Vender")) {sb_text.append("生产商");} else if (attr.getLocalName(i).equalsIgnoreCase("Price")) {sb_text.append("销售价格");} else if (attr.getLocalName(i).equalsIgnoreCase("Quantity")) {sb_text.append("数量");} else if (attr.getLocalName(i).equalsIgnoreCase("Psum")) {sb_text.append("金额");} else if (attr.getLocalName(i).equalsIgnoreCase("Mdate1")) {sb_text.append("维护开始日期");} else if (attr.getLocalName(i).equalsIgnoreCase("Mdate2")) {sb_text.append("维护结束日期");} else if (attr.getLocalName(i).equalsIgnoreCase("MPeriod")) {sb_text.append("维护期");}sb_text.append("</td><td bgcolor=\"#CCCCCC\">&nbsp;");sb_text.append(attr.getValue(i));sb_text.append("</td></tr>");}sb_text.append("<tr><td bgcolor=\"#99CCFF\" colspan=\"2\">&nbsp;--------------</td></tr>");}// --------------}// ------gen html------// sb_text.append(localName);// sb_text.append(":");}public void endElement(String namespaceURI, String localName, String qName)throws SAXException {System.out.println("end element:" + taglist.get(taglist.size() - 1));taglist.remove(taglist.size() - 1);// 移除最先放到list中的元素if (localName.equals("r")) {this.printout();}// ------gen html------// sb_text.append("<br/>");if (localName.equalsIgnoreCase("line")) {sb_text.append("</td></tr>");}}public void characters(char[] ch, int start, int length)throws SAXException {String curtagname = taglist.get(taglist.size() - 1);String elementtext = new String(ch, start, length);String output = String.format("tag[%s]:%s",taglist.get(taglist.size() - 1), elementtext);System.out.println(output);// ------gen html------if (curtagname.equalsIgnoreCase("line")) {sb_text.append(elementtext);}// -----------------------------}private void printout() {System.out.print("output:");System.out.println();System.out.print(sb_text.toString());System.out.println();}}

转载于:https://my.oschina.net/chenzz/blog/79642

[android]-xml解析示便-SAX相关推荐

  1. Android XML解析器– XMLPullParser

    Welcome to android xml parser example using XMLPullParser. We will have a sample XML file that we wi ...

  2. android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  3. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  4. android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  5. android XMl 解析神奇xstream 二: 把对象转换成xml

    前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...

  6. android XML解析详解(封装好的工具类)

    常见的XML解析有哪几种? DOM解析; PULL解析;(android自带的解析XML的技术) JDOM解析; SAX解析; DOM4J PULL解析示例代码: <1> 我们要解析的XM ...

  7. python中xml解析sax_python使用SAX解析xml

    python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件 在python中使用sax方式处理xml要先引入xml.s ...

  8. android xml解析demo,Android解析自定义xml文件--Sax解析xml文件,测试demo(方案二)...

    转载请注明出处:http://blog.csdn.net/droyon/article/details/9346657 Sax解析xml 以下是测试Demo 运行程序类 public class Te ...

  9. android xml解析的三种方式

    2019独角兽企业重金招聘Python工程师标准>>> 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了 ...

最新文章

  1. linux jdk配置环境变量
  2. Dom4j 写文件不全
  3. 下运行maven命令_实话实说 | 这些maven命令,你会几个?
  4. mysql存储过程1267_mysql存储过程一例
  5. 【第7章】 使用函数和模块来重用你的代码
  6. Three Bags CodeForces - 1467C
  7. C++STL-priority_queue
  8. JMeter录制脚本和参数化
  9. c语言怎么用右移代替除法,除法和算术右移之间的巧妙取代
  10. zblog添加html标题出错,ZBLOG模板修改的一些技巧小结
  11. 槽函数获取sender_Qt QObject::sender()用法
  12. ubuntu串口调试工具kermit和minicom
  13. 互联网创业公司如何防御DDoS攻击?
  14. Windows重定向技术【文件重定向与注册表重定向】
  15. POJ 2942 圆桌骑士 (点双学习笔记)
  16. 宿舍管理系统-设计数据库
  17. 【网安神器篇】——Sqlmap详解
  18. 【Simulink教程案例17】基于simulink的伪码序列相关峰检测仿真——将matlab数据导入到Simulink中作为信号源
  19. pdf怎么转换成图片?分享三种途径
  20. maven 仓库下载与配置教程

热门文章

  1. 用pfx证书java双向认证_把CA证书生成的crt的证书和pem的私钥转换成java能够使用的keystore和pcks12的证书,实现https双向认证...
  2. rust腐竹是什么意思_学习Rust 集合与字符串
  3. fusioncharts json java,FusionCharts使用教程:利用XML/JSON属性加载外部LOGO
  4. python不支持的数据类型有achar bint cfloat dlist_第1篇:Cython的数据类型(第二部分)
  5. Java异常持久化,Log4j进行日志的数据库持久化,说SQL语法异常。
  6. python math库函数源码_11. math库函数
  7. 依赖注入的三种方式_Java核心知识 Spring原理十 Spring 依赖注入四种方式
  8. mysql存储过程输入参数拆分_一文看懂mysql数据库存储过程、函数、视图、触发器、表...
  9. 你不懂API接口是什么?怎么和程序员做朋友
  10. 2021中国民营企业500强调研分析报告