xml详解三

xml解析简介(写到Java代码)!!!!最重要的内容
        *xml是标记型文档
        *js使用dom解析标记型文档
            -根据html的层级结构,在内存中分配一个树形结构,把html标签,属性和文字都封装成对象。
            -document对象、element对象、属性对象、文本对象、Node节点对象。
        
        *xml的解析方式(技术):dom和sax
            画图分析使用dom和sax解析xml过程
            
            **使用dom解析的特点:
            
                ***使用dom解析xml时,如果文件过大,会造成内存溢出
                **使用dom很容易实现增删改查的操作。
        解析步骤;采用事件驱动,边读边解析。从上到下一行一行的解析,
        解析到某一个对象像标签、属性、文本等把这些对象的名称返回

            **使用sax解析的特点:    
                优点:使用 sax 方式不会造成内存溢出因为它是边读边解析,从而实现查询。
                缺点:使用 sax 方式解析就不能实现增删改操作。
        
        *想要解析xml,首先需要解析器
        **不同公司提供了,针对dom和sax方式的解析器,通过api方式提供
            **sun公司提供了针对dom和sax解析器 jaxp
            **dom4j组织,针对dom和sax解析器 dom4j **实际开发常用
            **jdom组织,针对dom和sax解析器 jdom
    jaxp的api的查看:
        *jaxp时javase的一部分
        *jaxp解析器在jdk的javax.xml.parsers包里面
            **四个类分别针对dom和sax解析使用的类
            ***dom:
                DocumentBuilder :解析器类
                    -这个类是一个抽象类 ,不能new
                    -这个类的一个实例可以从DocumentBuilderFactory.newDocumentBuilder()方法获得。
                    -一个方法,可以解析到xml parse("xml的路径") 返回是Document 整个文档
                    -返回的document是一个接口,父节点是Noode,如果在document里面找不到想要的方法,到Node里面去找
                    
                    -在document里面方法:
                        -getElementByTagName(String tagname)
                        -这个方法可以得到标签
                        --返回集合NodeList
                        
                        createElement(String tagName)
                        --创建标签
                        
                        appendChild(Node newChild)
                        --把文本添加到标签下面
                        
                        removeChild(Node oldChild)
                        --删除节点
                        
                        getParentNode()
                        --获取父节点
                        NodeList
                        -getLength() 得到集合的长度
                        -item(int index)下标取到具体的值
                        
                        for(int i = 0;i < list.getLength(); i++){
                            list.item(i)
                        }
                        
                    
                    
                    
                DocumentBuilderFactory :解析器工厂
                    -这个类也是一个抽象类 ,不能new
                    -newInstance() 获得一个新的一个 DocumentBuilderFactory实例。 

    使用jaxp实现查询操作:
        查询xml中所有的name元素的值
        
        1.创建解析器工厂
        DocumentBuilderFactory.newInstance();
        2.根据解析器工厂获取解析器
        documentBuilderFactory.newDocumentBuilder();
        3.解析xml返回document
        documentBuilder.parse("src/person.xml");
        4.得到所有的name元素
        document.getElementsByTagName("name");
        5.遍历集合,得到每一个name元素
        
            遍历 getLength() item()
            list.item(i);//找到每一个name
            得到元素里面的值 使用 getContent()
            name1.getTextContent();
    
    查询xml中第一个name元素的值
        1.创建解析器工厂
        DocumentBuilderFactory.newInstance();
        2.根据解析器工厂获取解析器
        documentBuilderFactory.newDocumentBuilder();
        3.解析xml返回document
        documentBuilder.parse("src/person.xml");
        4.得到所有的name元素
        NodeList list = document.getElementsByTagName("name");
        //根据下标获取第一个name的值 
        Node item = list.item(0);
        //取出内容
        String name = item.getTextContent();
    添加一个xml标签在第一个p1标签下
        1.创建解析器工厂
        DocumentBuilderFactory.newInstance();
        2.根据解析器工厂获取解析器
        documentBuilderFactory.newDocumentBuilder();
        3.解析xml返回document
        documentBuilder.parse("src/person.xml");
        4.找到p1
         document.getElementsByTagName("p1");
        5.找到第一个元素
        list.item(0);
        6.创建元素
         document.createElement("sex");
        7.创建文本
        document.createTextNode("nv");
        8.把文本添加到标签下面
        sex.appendChild(nv);
        9.回写xml
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document),new StreamResult("src/person.xml"));

    修改xml文档:
         DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
         //获取解析器
         DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
            //解析xml返回document
            Document document = documentBuilder.parse("src/person.xml");

            Node sex = document.getElementsByTagName("sex").item(0);
            //修改节点内容
            sex.setTextContent("男");
            //回写xml
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.transform(new DOMSource(document),new StreamResult("src/person.xml"));
    删除xml标签:
        
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            //获取解析器
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
            //解析xml返回document
            Document document = documentBuilder.parse("src/person.xml");

            Node sex = document.getElementsByTagName("sex").item(0);
            //得到sex元素
            sex.getParentNode().removeChild(sex);
            //回写xml
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.transform(new DOMSource(document),new StreamResult("src/person.xml"));
 
        

你可能感兴趣的:(xml,javascript,html)