XML解析SAX,超强Android进阶路线知识图谱

2、Sax 创建 XML

首先,SAXTransformerFactory.newInstance() 创建一个工厂实例 factory

接着,factory.newTransformerHandler() 获取 TransformerHandler 的 handler 对象

然后,通过 handler 事件创建handler.getTransformer()、 handler.setResult(result),以及 startDocument()、startElement、characters、endElement、endDocument()等

Code

[java]  view plain copy print ?

  1. /** Sax方式,创建 XML  */

  2. public String saxCreateXML(){

  3. StringWriter xmlWriter = new StringWriter();

  4. Person []persons = new Person[3];       // 创建节点Person对象

  5. persons[0] = new Person(1, “sunboy_2050”, “http://blog.csdn.net/sunboy_2050”);

  6. persons[1] = new Person(2, “baidu”, “http://www.baidu.com”);

  7. persons[2] = new Person(3, “google”, “http://www.google.com”);

  8. try {

  9. SAXTransformerFactory factory = (SAXTransformerFactory)SAXTransformerFactory.newInstance();

  10. TransformerHandler handler = factory.newTransformerHandler();

  11. Transformer transformer = handler.getTransformer();     // 设置xml属性

  12. transformer.setOutputProperty(OutputKeys.INDENT, “yes”);

  13. transformer.setOutputProperty(OutputKeys.ENCODING, “utf-8”);

  14. transformer.setOutputProperty(OutputKeys.VERSION, “1.0”);

  15. StreamResult result = new StreamResult(xmlWriter);      // 保存创建的xml

  16. handler.setResult(result);

  17. handler.startDocument();

  18. AttributesImpl attr = new AttributesImpl();

  19. attr.clear();

  20. attr.addAttribute(“”, “”, “author”, “”, “homer”);

  21. attr.addAttribute(“”, “”, “date”, “”, “2012-04-27”);

  22. handler.startElement(“”, “”, “root”, attr);

  23. int personsLen = persons.length;

  24. for(int i=0; i<personsLen; i++){

  25. attr.clear();

  26. handler.startElement(“”, “”, “person”, attr);

  27. attr.clear();

  28. handler.startElement(“”, “”, “id”, attr);

  29. String id = persons[i].getId() + “”;

  30. handler.characters(id.toCharArray(), 0, id.length());

  31. handler.endElement(“”, “”, “id”);

  32. attr.clear();

  33. handler.startElement(“”, “”, “name”, attr);

  34. String name = persons[i].getName();

  35. handler.characters(name.toCharArray(), 0, name.length());

  36. handler.endElement(“”, “”, “name”);

  37. attr.clear();

  38. handler.startElement(“”, “”, “blog”, attr);

  39. String blog = persons[i].getBlog();

  40. handler.characters(blog.toCharArray(), 0, blog.length());

  41. handler.endElement(“”, “”, “blog”);

  42. handler.endElement(“”, “”, “person”);

  43. }

  44. handler.endElement(“”, “”, “root”);

  45. handler.endDocument();

  46. } catch (TransformerFactoryConfigurationError e) {      // SAXTransformerFactory.newInstance

  47. e.printStackTrace();

  48. } catch (TransformerConfigurationException e) {         // factory.newTransformerHandler

  49. e.printStackTrace();

  50. } catch (IllegalArgumentException e) {      // transformer.setOutputProperty

  51. e.printStackTrace();

  52. } catch (SAXException e) {      // handler.startDocument

  53. e.printStackTrace();

  54. } catch (Exception e) {

  55. e.printStackTrace();

  56. }

  57. savedXML(fileName, xmlWriter.toString());

  58. return xmlWriter.toString();

  59. }

运行结果:

3、Sax解析XML

Code

[java]  view plain copy print ?

  1. /** Sax方式,解析 XML  */

  2. public String saxResolveXML(){

  3. StringWriter xmlWriter = new StringWriter();

  4. InputStream is = readXML(fileName);

  5. try {

  6. SAXParserFactory factory = SAXParserFactory.newInstance();

  7. SAXParser saxParser = factory.newSAXParser();

  8. PersonHandler handler = new PersonHandler();    // person处理Handler

  9. saxParser.parse(is, handler);                   // handler解析xml

  10. // 获取解析的xml

  11. String xmlHeader = handler.getXMLHeader();

  12. xmlWriter.append(xmlHeader);

  13. List personsList = handler.getPersons();

  14. int personsLen = personsList.size();

  15. for(int i=0; i<personsLen; i++){

  16. xmlWriter.append(personsList.get(i).toString()).append(“\n”);

  17. }

  18. } catch (FactoryConfigurationError e) {         // SAXParserFactory.newInstance

  19. e.printStackTrace();

  20. } catch (ParserConfigurationException e) {      // factory.newSAXParser

  21. e.printStackTrace();

  22. } catch (SAXException e) {          // factory.newSAXParser

  23. e.printStackTrace();

  24. } catch (IllegalArgumentException e) {      // saxParser.parse

  25. e.printStackTrace();

  26. } catch (IOException e) {           // saxParser.parse

  27. e.printStackTrace();

  28. } catch (Exception e) {

  29. e.printStackTrace();

  30. }

  31. return xmlWriter.toString();

  32. }

  33. /** Handler处理类 */

  34. private final class PersonHandler extends DefaultHandler{

  35. private List personsList = null;  // 保存person

  36. private Person person = null;

  37. private StringBuffer xmlHeader;             // 保存xml头部信息

  38. private String tag = null;          // xml Element

  39. /** 返回解析的xml头部信息 */

  40. public String getXMLHeader(){

  41. return xmlHeader.toString();

  42. }

  43. /** 返回解析的Person实例数组 */

  44. public List getPersons(){

  45. return personsList;

  46. }

  47. @Override

  48. public void startDocument() throws SAXException{

  49. super.startDocument();

  50. personsList = new ArrayList();

  51. xmlHeader = new StringBuffer();

  52. }

  53. @Override

  54. public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{

  55. super.startElement(uri, localName, qName, attributes);

  56. if(“root”.equals(localName)) {

  57. String attrAuthor = attributes.getValue(0);

  58. String attrDate = attributes.getValue(1);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

下面是辛苦给大家整理的学习路线

img-blog.csdnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png)

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-v1GmnwTt-1711807188688)]

最后

下面是辛苦给大家整理的学习路线

[外链图片转存中…(img-nOAQQmNz-1711807188688)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值