• <tr id='MJhXvI'><strong id='MJhXvI'></strong><small id='MJhXvI'></small><button id='MJhXvI'></button><li id='MJhXvI'><noscript id='MJhXvI'><big id='MJhXvI'></big><dt id='MJhXvI'></dt></noscript></li></tr><ol id='MJhXvI'><option id='MJhXvI'><table id='MJhXvI'><blockquote id='MJhXvI'><tbody id='MJhXvI'></tbody></blockquote></table></option></ol><u id='MJhXvI'></u><kbd id='MJhXvI'><kbd id='MJhXvI'></kbd></kbd>

    <code id='MJhXvI'><strong id='MJhXvI'></strong></code>

    <fieldset id='MJhXvI'></fieldset>
          <span id='MJhXvI'></span>

              <ins id='MJhXvI'></ins>
              <acronym id='MJhXvI'><em id='MJhXvI'></em><td id='MJhXvI'><div id='MJhXvI'></div></td></acronym><address id='MJhXvI'><big id='MJhXvI'><big id='MJhXvI'></big><legend id='MJhXvI'></legend></big></address>

              <i id='MJhXvI'><div id='MJhXvI'><ins id='MJhXvI'></ins></div></i>
              <i id='MJhXvI'></i>
            1. <dl id='MJhXvI'></dl>
              1. <blockquote id='MJhXvI'><q id='MJhXvI'><noscript id='MJhXvI'></noscript><dt id='MJhXvI'></dt></q></blockquote><noframes id='MJhXvI'><i id='MJhXvI'></i>
                专注Java教育12年 全国咨询/投诉热线:400-8080-105

                首页 hot资讯 解析XML

                解析XML

                更新时间:2021-08-19 11:21 来源:玩彩网 浏览88次

                什么是XML?有什么用途

                1.XML全名为可扩展标记语言(eXtensible Markup Language),是w3c组织的一★个技术规范,具有严格的数据格式,主要作用是描述数据并集中于数据的内容。

                2.XML的ξ主要用途:

                (1)作为〓小型数据库存储数据,office软件貌似就是这么用xml存储数据。

                (2)作为配置文件,存☉储相关的配置信息,如spring、mybatis等框架的配置文件。

                (3)作为传输数据的载体,如webservice。不过由于xml的╳数据格式冗余太多,没有json高效简洁。

                XML的文档格式

                1.xml的文档声明 :

                该声明不是必需,如果有则会在♀xml文档的第一行。 该声明「有三个键值对,version表示版本号,encoding表示该文档※使用的字符集编码,standalone表示是否可以在不读取其他文件的情况下处理该文档▅。

                2.xml注释 :<!-- 注释内容 -->

                3.标签 <标签><标签/> 、<标签/>

                (1)标签区分大小写

                (2)标签不能以数字或下划线开头、不能以xml开头、不能包含空ζ格

                (3)标签中所有的空格和换行都会当作标签内容来处理

                4.xml中的转义字符

                5.将内容原ω 样输出

                XML约束

                如果一个XML文件的语法符合W3C的规范,这该XML是一个良好的XML。如果』一个良好的XML通过了用户自定义的DTD和Schema的校验约束,则称这个XML为有效的XML。

                XML的约束分∩为两种,DTD约束和Schema约束

                1.DTD约束 : 文档类型定∴义(Document Type Definition,简称DTD)

                (1)DTD的作用

                DTD定义了XML文档内容的结构,保证XML以一致的格式存储数据

                XML允许用户☆为应用程序创建自己的DTD

                通过DTD定义的词汇表以及文档语法,XML解析器可以检查XML文档内容的有效性

                (2)如何引入DTD

                内部编写:

                <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                <!DOCTYPE 班级 [
                    <!ELEMENT 班级 (学生+)>
                    <!ELEMENT 学生 (姓名,性别,年龄)>
                    <!ELEMENT 姓名 (#PCDATA)>
                    <!ELEMENT 性别 (#PCDATA)>
                    <!ELEMENT 年龄 (#PCDATA)>
                ]>
                <班级>
                    <学生>
                        <姓名>小明</姓名>
                        <性别>男</性别>
                        <年龄>67</年龄>
                    </学生>
                    ...
                </班级>

                外部引入本地约束▆文件:<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL"> 

                <?xml version="1.0" encoding="UTF-8"?>
                <!DOCTYPE books SYSTEM "F:/eclipseWorkSpace/testProject/src/testxml/book.dtd">
                <books>
                    <book id="001" name="红楼梦">
                        <price>10.0</price>
                    </book>
                    <book id="002" name="三国演义">
                        <price>11.0</price>
                    </book>
                    <book id="003" name="西游记">
                        <price>12.0</price>
                    </book>
                    <book id="004" name="水浒传">
                        <price>13.0</price>
                    </book>
                </books>
                <!--DTD约束文件book.dtd-->
                <?xml version="1.0" encoding="UTF-8" ?>
                <!ELEMENT books (book)?>
                <!ELEMENT book (price)?>
                <!ATTLIST book
                    id ID #REQUIRED
                    name CDATA #REQUIRED
                >
                <!ELEMENT price (#PCDATA)>

                外部引入公共约束文件:<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">

                java解析XML文件

                DOM解析:将XML文件加载进内存,构建DOM树,这样可以随意存取和修改文件树的任何部分,没有次数限制,并且易于开发,但不适合大型的XML文件。

                SAX解析:类似【于流媒体的特点,能够立即对XML进行分析,而不是等待所有数据都加载完成。SAX解析是基于事件的模型,它在解析的过程中可以触发一系列的事件,然后激活回调方法进行处理,并且不能对XML进ζ 行修改操作。

                SAX只能按照顺序进行解析,并且占用内存较小,适合大型XML文件。

                JAXP(Java API for XML Processing,意为XML处理的Java API)是Java XML程序设计的应用程序接口之一,它提供解析和验证XML文档的能力。DOM解析和SAX解析是两种思想,JAXP是java对其的⊙具体实践。

                JDOM 实现了JAVA自己的文档模型,其效率比JAXP的DOM解析要快,JDOM自身不「包含解析器。它通常使用SAX2解ㄨ析器来解析和验证输入XML文档。JDOM还是要构建DOM树,所以▅对超大型XML文件还是不太适合。

                DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,并且具有更好的性能,同样也是不适合大型的XML文件。

                StAX 是一个基于→JAVA API用于解析XML文档,类似SAX解析器的方式。StAX是PULL API,其中作为SAX是PUSH API。这意味着如果StAX解析器,客户端应用程』序需要询问StAX解析器从XML获取信息它所需要的,但如果是SAX解析器,客户端应用程序需要获取信息时,SAX解析器会通知客户端应用程序的信息是︾可用的。StAX的API可以读取和写入XML文档。

                代码示例:

                public class TestJAXP {
                    public static void main(String[] args) throws Exception{
                        //jaxpDom();
                        jaxpSax();
                    }    
                    public static void jaxpDom() throws Exception{
                        //读取xml文档
                        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                        DocumentBuilder builder = factory.newDocumentBuilder();
                        Document document = builder.parse(new FileInputStream(new File("F:/eclipseWorkSpace/testProject/src/testxml/book.xml")));
                        String version = document.getXmlVersion();
                        System.out.println(version);
                        System.out.println(document.getNodeName());
                        Node rootNode = document.getDocumentElement();
                        System.out.println(rootNode.getNodeName() + "==" +(rootNode.getNodeType()== Node.ELEMENT_NODE));
                        NodeList childNodes = rootNode.getChildNodes();
                        int lenght = childNodes.getLength();
                        for(int i=0;i<lenght;i++){
                            Node childNode = childNodes.item(i);
                            if(childNode.getNodeType() == Node.ELEMENT_NODE){
                                System.out.println(childNode.getNodeName() +"=="+ childNode.getNodeType());
                                System.out.println(childNode.getTextContent());
                                NamedNodeMap attributes = childNode.getAttributes();
                               for(int j=0 ; j<attributes.getLength();j++){
                                   Node attr = attributes.item(j);
                                   System.out.println(attr.getNodeName() + "==" + attr.getNodeValue());
                               }
                            }
                        }
                        Element book = document.createElement("book");
                        book.setAttribute("id", "005");
                        book.setAttribute("name", "XXX");
                        Element privce = document.createElement("price");
                        privce.setTextContent("15.01");
                        book.appendChild(privce);
                        rootNode.appendChild(book);        
                        //输出xml
                        TransformerFactory tFactory = TransformerFactory.newInstance();
                        Transformer tf = tFactory.newTransformer();
                        tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("F:/eclipseWorkSpace/testProject/src/testxml/book2.xml")));
                    }    
                    public static void jaxpSax() throws Exception{
                        SAXParserFactory factory = SAXParserFactory.newInstance();
                        SAXParser parser = factory.newSAXParser();
                        XMLReader xmlReader = parser.getXMLReader();
                        //XMLReader xmlReader = XMLReaderFactory.createXMLReader();//这种方式获取xmlReader也可以
                        xmlReader.setContentHandler(new BookParser());
                        xmlReader.parse(new InputSource(new FileInputStream("F:/eclipseWorkSpace/testProject/src/testxml/book2.xml")));
                    }
                }
                class BookParser extends DefaultHandler{
                    @Override
                    public void startDocument() throws SAXException {
                       System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
                    }
                    @Override
                    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                        StringBuilder sb = new StringBuilder();
                        sb.append("<").append(qName);
                        for(int i=0;i<attributes.getLength();i++){
                            sb.append(" \"").append(attributes.getLocalName(i)).append("\"=").append(attributes.getValue(i));
                        }
                        sb.append(">");
                        System.out.print(sb);
                    }
                    @Override
                    public void endElement(String uri, String localName, String qName) throws SAXException {
                        System.out.print("</"+qName+">");
                    }
                    @Override
                    public void characters(char[] ch, int start, int length) throws SAXException {
                        String cnt = new String(ch,start,length);
                        System.out.print(cnt);
                    }
                }
                public class TestDom4J {
                    public static void main(String[] args) throws Exception {
                        String url = "F:/eclipseWorkSpace/testProject/src/testxml/book3.xml";
                        getInfo(url);
                        //updateXml(url);
                    }    
                    @SuppressWarnings("unchecked")
                    public static void getInfo(String url) throws DocumentException{
                        SAXReader reader = new SAXReader();
                        Document document = reader.read(new File(url));
                        Element rootNode = document.getRootElement();
                        System.out.println(rootNode.getName());
                        List<Element> elements = rootNode.elements();
                        for(Element n : elements){
                            System.out.println(n.getName());
                            List<Attribute> attributes = n.attributes();
                            for(Attribute attr : attributes){
                                System.out.println(attr.getName()+"==="+attr.getValue());
                            }
                        }
                    }    
                    public static void updateXml(String url) throws Exception{
                        SAXReader reader = new SAXReader();
                        Document document = reader.read(new File(url));
                        Element rootNode = document.getRootElement();
                        Element book = rootNode.addElement("book");
                        book.addAttribute("id", "005");
                        book.addAttribute("name","封神榜");
                        Element price = book.addElement("price");
                        price.setText("123.1");        
                        OutputFormat format = OutputFormat.createCompactFormat();
                        format.setEncoding("UTF-8");
                        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(url),format);
                        xmlWriter.write(document);
                        xmlWriter.close();        
                    }
                }
                public class TestStAX {
                    public static void main(String[] args) throws FileNotFoundException, XMLStreamException {
                        String url = "F:/eclipseWorkSpace/testProject/src/testxml/book.xml";
                        getInfo(url);
                    }    
                    public static void getInfo(String url) throws FileNotFoundException, XMLStreamException{
                        XMLInputFactory factory = XMLInputFactory.newInstance();
                        XMLStreamReader reader = factory.createXMLStreamReader(new FileInputStream(url));
                        while(reader.hasNext()){
                            int event = reader.next();
                            if(event == XMLStreamConstants.START_ELEMENT ){
                                StringBuilder sb = new StringBuilder();
                                sb.append("<").append(reader.getLocalName());
                                for(int i=0;i<reader.getAttributeCount();i++){
                                    sb.append(" \"").append(reader.getAttributeLocalName(i)).append("\"=").append(reader.getAttributeValue(i));
                                }
                                sb.append(">");
                                System.out.print(sb);
                            }            
                            if(event == XMLStreamConstants.END_ELEMENT){
                                System.out.print("</"+reader.getLocalName()+">");
                            }            
                            if(event == XMLStreamConstants.CHARACTERS){
                                System.out.print(reader.getText());
                            }
                        }
                    }
                }

                以上就是动力节ㄨ点小编介绍的"解析XML",希望对大家有帮≡助,想了解更多可查Ψ 看Java在线学习。玩彩网在线学习教程,针对没♂有任何Java基础的读者学习,让你从入门到△精通,主要介绍了一些Java基础的核▂心知识,让同学们更好更〓方便的学习和了解Java编程,感兴】趣的同学可以关注一下。

                提交申请后,顾问老师会电∮话与您沟通安排学习

                免费课程推荐 >>
                技术文档推荐① >>

                返回顶部