• 学习Java的第三十二天。。。(XML)


    XML简介

    XML(EXtensible Markup Language),可扩展标记语言

    特点

    XML与操作系统、编程语言的开发平台无关
    实现不同系统之间的数据交换

    作用

    数据交互
    配置应用程序和网站
    Ajax基石

    XML文档结构

    声明:
    文档元素描述信息

    1. "1.0" encoding="UTF-8"?>
    2. <books>
    3. <book id="bk101">
    4. <author>王珊author>
    5. <title>.NET高级编程title>
    6. <description>包含C#框架和网络编程等description>
    7. book>
    8. <book id="bk102">
    9. <author>李明明author>
    10. <title>XML基础编程title>
    11. <description>包含XML基础概念和基本作用description>
    12. book>
    13. books>

    XML标签

    XML文档内容由一系列标签元素组成:<元素名 属性名=“属性值”>元素内容
    空元素:
     

    注意:1.属性值用双引号包裹  2.一个元素可以有多个属性 3.属性值中不能直接包含<、“、& 4.不建议使用的字符:‘、>

    XML编写注意事项

        所有XML元素都必须有结束标签
        XML标签对大小写敏感
        XML必须正确的嵌套
        同级标签以缩进对齐
        元素名称可以包含字母、数字或其他的字符
        元素名称不能以数字或者标点符号开始
        元素名称中不能含空格

    命名空间

    1. "1.0" encoding="UTF-8"?>
    2. <batchCompany xmlns="http://www.Aptech_edu.ac"
    3. xmlns:tea="http://www.tea.org">
    4. <batch-list>
    5. <batch type="thirdbatch">第三批次batch>
    6. <batch tea:type="thirdbatch">第三批茶batch>
    7. <batch>午班批次batch>
    8. batch-list>
    9. batchCompany>

    除非带有前缀,否则属性属于所属的元素的命名空间

    作用:解决在复杂、大型XML文件中,出现名称相同,但是含义不同的元素

    比如:

    1. "1.0" encoding="UTF-8"?>
    2. <cameras xmlns:canon="http://www.canon"
    3. xmlns:nikon="http://www.nikon.com">
    4. <canon:camera prodID="P663" name="Camera傻瓜相机"/>
    5. <nikon:camera prodID=“K29B3” name=“Camera超级35毫米相机"/>
    6. cameras>

    XML解析器

    解析器类型

    非验证解析器---检查文档格式是否良好
    验证解析器---使用DTD检查文档的有效性

    解析XML技术

    DOM

    基于XML文档树结构的解析
    适用于多次访问的XML文档
    特点:比较消耗资源

    SAX

    基于事件的解析
    适用于大数据量的XML文档
    特点:占用资源少,内存消耗小

    DOM4J

    非常优秀的Java XML API
    性能优异、功能强大
    开放源代码

    DOM解析XML

    DOM介绍

        文档对象模型(Document Object Model)
        DOM把XML文档映射成一个倒挂的树

    1. <book >
    2. <title>三国演义title>
    3. <author>罗贯中author>
    4. <price>30元price>
    5. book>

      

     常用接口介绍

    DOM解析包:org.w3c.dom

     DOM解析XML文件步骤

    1.创建解析器工厂对象
    2.解析器工厂对象创建解析器对象
    3.解析器对象指定XML文件创建Document对象
    4.以Document对象为起点操作DOM树

    1. "1.0" encoding="UTF-8"?>
    2. <PhoneInfo>
    3. <Brand name="华为">
    4. <Type name="U8650" />
    5. <Type name="HW123" />
    6. <Type name="HW321" />
    7. Brand>
    8. <Brand name="苹果">
    9. <Type name="iPhone4" />
    10. Brand>
    11. PhoneInfo>

     

    1. import java.io.IOException;
    2. import javax.xml.parsers.DocumentBuilder;
    3. import javax.xml.parsers.DocumentBuilderFactory;
    4. import javax.xml.parsers.ParserConfigurationException;
    5. import org.w3c.dom.Document;
    6. import org.xml.sax.SAXException;
    7. public class XmlDocumentDemo02 {
    8. //定义一个方法实现获取Document对象操作
    9. public Document getDocument(String url){
    10. Document document = null;
    11. //创建解析器工厂对象
    12. DocumentBuilderFactory bdf = DocumentBuilderFactory.newInstance();
    13. //通过解析器工厂对象创建解析器对象
    14. try {
    15. DocumentBuilder db = bdf.newDocumentBuilder();
    16. document = db.parse(url);
    17. } catch (ParserConfigurationException e) {
    18. // TODO Auto-generated catch block
    19. e.printStackTrace();
    20. } catch (SAXException e) {
    21. // TODO Auto-generated catch block
    22. e.printStackTrace();
    23. } catch (IOException e) {
    24. // TODO Auto-generated catch block
    25. e.printStackTrace();
    26. }
    27. return document;
    28. }
    29. }
    1. import org.w3c.dom.Document;
    2. import org.w3c.dom.Element;
    3. import org.w3c.dom.Node;
    4. import org.w3c.dom.NodeList;
    5. public class Test {
    6. public static void main(String[] args) {
    7. //创建XMLDocumentDemo02对象
    8. XmlDocumentDemo02 xdd = new XmlDocumentDemo02();
    9. //调用getDocument(string url)将"收藏信息.xml"文件转换成Document对象
    10. Document document = xdd.getDocument("收藏信息.xml");
    11. //获取数据
    12. NodeList brands = document.getElementsByTagName("Brand");
    13. for (int i = 0; i < brands.getLength(); i++) {
    14. //Node是一个节点接口,节点包括元素节点,属性节点,文本节点,而现在我们获取的是brand节点,所以需要进行类型转换
    15. Node node = brands.item(i);
    16. Element brand = (Element)node;
    17. String value=brand.getAttribute("name");
    18. System.out.println(value);
    19. }
    20. }
    21. }

  • 相关阅读:
    一文讲解Linux Scheduler之rt选核流程
    【Android】settings命令幕后-----cmd命令
    Maven多模块管理(转载)
    C# Excel操作类EPPlus
    腾讯云2023年双十一优惠活动整理汇总
    Tensorflow模型整体构建流程
    传统数据库逐渐“难适应”,云原生数据库脱颖而出
    基于Nodejs和mysql的工具市场客户信息管理系统
    35 个 Spark 常用算子总结
    项目1:STM32+DHT11+FreeRTOS+emwin+LCD
  • 原文地址:https://blog.csdn.net/qihaojinqiuma/article/details/126504994