2018/08/03 xml框架主要用来储存信息,不需要在网页显示信息

XML用来储存信息,不需要显示出来

XML(可扩展标记语言)(不需要编译的语言)
XML 好处:其实hml=xml+http4(跨平台开发,既能写移动端,也能写pc)
1.支持跨平台,各系统;
2.可以自由编写标签,可扩展性比较好
3.用于保存数据html5(显示数据) 支持ajax异步刷新技术



非验证性解析错误(基本常用的错误(比如语法格式不对),浏览器会帮你报错并解析)。

高级解析器(一般会声明命名空间,跟我们java里面的包名一样,防止类冲突),设置我们的DTD的命名,规定你的XML布局的顺序,规定了XML只能写哪些标签。这个顺序,一般可以在http://mybatis.org/dtd/mybatis-3-config.dtd找到具体的规范。

XML特殊符号:
< < 小于号
> > 大于号
& & 和
' ’ 单引号
" ” 双引号

XML特点:
1.所有元素都必须有结束标签;
2.XML对大小写敏感;
3.XML必须正确的嵌套;
4.同级标签以缩进对其;
5.元素名称中不能含有空格(name value等这些);

不同解析的特点:
1.dom解析 XML树 它的缺点是首先就整个DOM加载到我们的内存里,会给内存造成一定的压力;
2.Dom 4j解析 对DOM的封装,优化了DOM的操作,是DOM量减少;
3.Sax(移动端)解析 边解析边加载,效率更高,局限于小的xml;
一般开发比较常用的是DOM解析,因为这种jar包比较少,没有第三方jar包。

NodeList list = dom.getElementsByTagName(“brand”);
//获得所有 标签名为brand的所有节点的集合

    for (int i = 0; i < list.getLength(); i++) {
        Node node = list.item(i);

//遍历集合中的节点
Element elementbrand = (Element) node;
//把node节点 强转为元素

如果获取的节点集合中包含文本节点:

for (int j = 0; j < childlist.getLength(); j++) {
Node nodetype = childlist.item(j);

            //要先进行判断,因为如果有空格或者文本,就是文本节点,没法转换为元素节点
            if(nodetype.getNodeType()==Node.ELEMENT_NODE){
            Element element = (Element) nodetype;

XML的DM4j操作方法:

package com.offcn.text;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class DOM4j操作方法 {

private Document dom;

//得到Document对象
public void getDom(){
    try {
        SAXReader saxreader= new SAXReader();

        saxreader.read(new File("src/phone.xml"));



    } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



}

public void show(){
    Element rootElement = dom.getRootElement();
    //获得根节点

    Iterator <Element> elementIterator = rootElement.elementIterator();
    //迭代器需要个泛型。

    //迭代器遍历
    while(elementIterator.hasNext()){
        //获得元素

Element element = elementIterator.next();
//获得元素的name属性的值
String value = element.attributeValue(“name”);

        //获得element迭代器,来获得element子元素
        Iterator<Element> elementIterator2 = element.elementIterator();
        while(elementIterator2.hasNext()){
        Element element2 = elementIterator2.next();
        element2.attributeValue("name");
        }

    }


}


public void add(String path){
    //在dom中找到根标签元素
    Element rootElement = dom.getRootElement();
    //创建brand标签元素 name= “三星”
    Element brand = rootElement.addElement("brand");
    brand.setAttributeValue("name", "三星");


    //创建type标签子节点,name="note4"
    Element type = brand.addElement("type");
    type.setAttributeValue("name", "note4");

    save(path);

}



public void save(String path){

    try {

        OutputFormat format = OutputFormat.createCompactFormat();

        //设置编码格式
        format.setEncoding("utf-8");

XMLWriter xmlWriter = new XMLWriter(new FileWriter(path), format);
xmlWriter.close();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void update(String path){
    Element rootElement = dom.getRootElement();
    Iterator<Element> elementIterator = rootElement.elementIterator();
    while(elementIterator.hasNext()){
        Element element = elementIterator.next();
        if(element.attributeValue("name").equals("三星")){
            element.setAttributeValue("name", "华为");

        }

    }
    save(path);

}

}

DOM操作方法:

package com.offcn.text;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.nio.file.Path;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

//dom解析XML
public class XML的DM操作方法 {

public static void main(String[] args) {
    XML的DM操作方法 test = new XML的DM操作方法();
test.getDoM();
    test.add();
    test.save("src/new.xml");
}




private Document dom;
//创建一个获得dom对象的方法。
public void getDoM(){
    try {
        //简单工厂者设计模式
        //首先得到DOM解析器工厂

DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
//得到DOM解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//得到DOM对象,记录加载的XML路径,解析XML路径
dom = db.parse(“src/phone.xml”);

    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
//展示XML的方法

    }
public void show(){

    NodeList list = dom.getElementsByTagName("brand");
    //获得所有 标签名为brand的所有节点的集合
    //遍历集合
    for (int i = 0; i < list.getLength(); i++) {
        //遍历集合中的节点
        Node node = list.item(i);

        //把node节点  强转为元素

        Element elementbrand = (Element) node;


        //元素设置获得name的value值
        elementbrand.getAttribute("name");




        NodeList childlist = elementbrand.getChildNodes();
        for (int j = 0; j < childlist.getLength(); j++) {
            Node nodetype = childlist.item(j);

            //把node强转为元素节点,但是要先进行判断,因为如果有空格或者文本,就是文本节点,没法转换为元素节点
            if(nodetype.getNodeType()==Node.ELEMENT_NODE){
            Element element = (Element) nodetype;

            System.out.println(element.getAttribute("name"));
            }
        }


    }
}
//添加一个brand标签
public void add(){

    //创建brand标签
    Element elementbrand = dom.createElement("brand");
    //给节点赋值
    elementbrand.setAttribute("name", "三星");

    //创建type 标签
    Element elementtype = dom.createElement("type");
    //赋值
    elementtype.setAttribute("name", "note4");
    //type标签添加到brand标签里
    elementbrand.appendChild(elementtype);

    //获取根节点,把brand节点添加到根节点里
    dom.getElementsByTagName("PhoneInfo").item(0).appendChild(elementbrand);




}
//如何把DOM对象的数据写入XML?
public void save(String path){

        //获得一个XML转换器的工厂
        try {
            TransformerFactory tff= TransformerFactory.newInstance();
            //设置4个空格
            tff.setAttribute("indent-number", 4);

            //从工厂对象获得转换器
            Transformer tf = tff.newTransformer();

            tf.setOutputProperty(OutputKeys.INDENT, "yes");
            tf.setOutputProperty(OutputKeys.ENCODING, "utf-8");
            //


            //得到source对象
            DOMSource domSource= new DOMSource(dom);

            //用这个输出流的原因是:设置编码,解决乱码
            StreamResult streamResult = new StreamResult(new OutputStreamWriter(new FileOutputStream(path),"utf-8"));

            //开始进行转换,
            tf.transform(domSource, streamResult);






        } catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }









}
//添加元素属性id
public void updateId(String path){
    NodeList nodeList = dom.getElementsByTagName("brand");
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node node= nodeList.item(i);

        Element element = (Element) node;

        element.setAttribute("id",(i+1)+"");
        //(i+1)+""是吧i+1拼接成字符串,如果放在双引号内,i就不是变量了

    }

    this.save(path);


}

public void delete(String path){

    NodeList list = dom.getElementsByTagName("brand");

    for (int i = 0; i < list.getLength(); i++) {
        Node node = list.item(i);
        Element element = (Element) node;
        element.getParentNode().removeChild(element);


    }


    save(path);

}

}

猜你喜欢

转载自blog.csdn.net/weixin_42844971/article/details/81448203
今日推荐