zoukankan      html  css  js  c++  java
  • 04---XML编程整理

    一、XML概述

     
        XML(eXtensible Markup Language),可扩展标记语言,
     
        被设计的宗旨是传输数据,而非显示数据
     
        W3C发布的,目前遵循1.0规范
     
        XML标签没有被预定义,需要用户自行定义标签
     
        XML是一种通用的数据交换格式,需要Parser(解析器)来执行或显示
     
        通常用于软件的配置文件,来提高灵活性
     
    二、XML语法
     
       1、文档的组成
     
           ·文档声明
               
                     <?xml version="1.0" encoding="UTF-8"?>
     
                     必须出现在文档的第一行,默认编码为utf-8,
     
                     standalone属性说明文档是否独立,即是否依赖其他文件
     
           ·元素
     
                  标签不允许交叉嵌套
     
                  一个XML文档必须有且仅有一个根标签
     
                  XML中不会忽略主体内容中出现的空格和换行
     
                  严格区分大小写
     
                  只能以字母或下划线开头,不能以xml开头
     
                  字符之间不能有空格、制表符、不能使用冒号
     
           ·元素属性
     
                  一个元素可以有多个属性,但不允许重复,
     
                  属性值必须放在引号中,单双都可以
     
                  在某些场合,如需要传输尽可能小的文件时,可以把子元素写成属性方式,节省空间
     
           ·注释
     
                  <!-- 注释内容-->、 注释不能嵌套,会提前匹配到结束
     
           ·CDATA区
     
                  是Character Data的缩写,不会被解析器解析的文本
     
                  <![CDATA[  包含标签的内容  ]]>
     
           ·特殊字符
                    
                    
                  
     
           ·处理指令(PI:Processing Instruction)
     
                   即第一行声明的语句,告诉软件如何解析XML文档
     
    三、XML约束
     
              XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确的获取
     
          文件中的内容而报错(如Tomcat,网易新闻客户端例子)
     
              XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档成为约束
     
              格式良好的XML:遵循XML语法的XML
     
              有效的XML:遵循约束文档的XML
     
              总之,约束文档定义了在XML中允许出现的元素名称、属性及元素出现的顺序等
     
          
        常用的约束技术:
     
            ·XML DTD
     
                 DTD(Document Type Definition):文档类型定义,用于约束XML书写规范
     
                 
                  编程校验XML文档的正确性
     
                  以下为JavaScript代码
     
                        //创建XML文档解析器对象
     
                        var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
     
                       //开启xml校验器
     
                        xmldoc.validateOnParse = "true";
     
                       //装载xml文档
     
                        xmldoc.load("book.xml");
     
                       //获取错误信息
     
                       var reason = xmldoc.parseError.reason;
     
                       var lineNum = xmldoc.parseError.line;
     
                       document.write("reason:"+reason+",lineNum"+lineNum);
     
                     DTD语法、用的时候查一下手册吧
     
            ·XML Schema
                   
                                XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
     
                      XML Schema 可针对未来的需求扩展
     
                      XML Schema 支持数据类型
     
                      XML Schema 支持命名空间
     
                       
            ·XDR  比较少用
     
            ·SOX  比较少用
     
    四、XML解析
     
         使用Java解析XML分两种方式:DOM方式和SAX方式
     
         ·DOM:文档对象模型,是W3C推荐的处理XML的一种方式
     
         ·SAX:Simple API for XML,是比较流行的开源社区XML-DEV,几乎所有解析器都支持
     
         XML解析开发包:
     
             ·JAXP:SUN公司推出的解析标准实现
     
                     Java API for XML Processing。开发包是JavaSe的组成部分
     
                     包含: org.w3c.com:提供DOM方式解析XML的标准接口
     
                            org.xml.sax:提供SAX方式解析XML的标准接口
     
                            Javax.xml:提供了解析XML文档的类
     
                     
                   
     
                 DocumentBuilderFactory dbf = DDocumentBuilderFactory.newInstance();
     
                 DocumentBuilder db = dbf.newDocumentBuilder();
     
                 Document doc = db.parse("xxx.xml");
     
                 //执行增删改查操作
     
     
                TransformerFactory tsf = TransformerFactory.newInstance();
     
                Transformer tsTransformer = tsf.newTransformer();
     
                tsTransformer.transform(new DOMSource(doc),
     
                                        new StreamResult("xxx.xml"));
     
                    
                      SAX方式:
                         

                                                    使用SAXParserFactory创建SAX解析工厂

                                                    XParserFactory spf = SAXParserFactory.newInstance();

                                                    通过SAX解析工厂得到解析器对象

                                                    XParser sp = spf.newSAXParser();

                                                   通过解析器对象得到一个XML的读取器

                                                   LReader xmlReader = sp.getXMLReader();

                                                  设置读取器的事件处理器

                                                  lReader.setContentHandler(new BookParserHandler());

                                                  解析xml文件

                                                  lReader.parse("book.xml");

                                  
             ·DOM4J:开源组织推出的解析开发包
     
                                      由早期开发JDOM的人分离出去而独立开发的一个简单、灵活的开放源代码库
     
                      一款非常优秀的Java XML API,需要下载jar包
                   
                      //获取document对象
             
                      SAXReader reader = new SAXReader();
                      Document document = reader.read(url);
     
                      //制定编码的写回方式
     
                      OutputFormat format = OutputFormat.createPrettyPrint();                  
                      format.setEncoding("GBK");       
                      MLWriter writer = new XMLWriter(new FileOutputStream("output.xml"),format);
                      writer.write(document);
                      writer.close(); 
     
                   支持XPath:
     
                    XPath 使用路径表达式来选取 XML 文档中的节点或者节点集
     
             ·JDom:开源组织推出的解析开发包(目前比较不流行)
     
     
            
  • 相关阅读:
    Could not get lock /var/lib/apt/lists/lock
    使用vmware提示无法打开内核设备 \.Globalvmx86: 系统找不到指定的文件
    Linux 下安装 MATLAB
    超级干货:Linux常用命令 & 实用命令万字总结!
    GNB 配置图图解
    GNB Linux 部署说明
    解决Firefox启动、打开网页慢、占用内存多
    【Git教程】如何清除git仓库的所有提交记录,成为一个新的干净仓库
    mount --bind和硬连接的区别
    彻底删除 Windows Defender
  • 原文地址:https://www.cnblogs.com/rocomp/p/4748787.html
Copyright © 2011-2022 走看看