jaxp解析器 使用DOM对象来解析XML

来源:互联网 发布:mac日历广告如何禁止 编辑:程序博客网 时间:2024/05/29 14:18

XML 的解析方式有两种 DOM 和sax

DOM 会产生内存溢出问题 删除添加 遍历方便

sax 边读边解析  不会产生内存溢出 不能删除添加

解析器有 jaxp dom4j

package jaxp.demo;


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

/**
 * 实现jaxp 操作XML
 * @author wyd
 */
public class JaxpDemo {
public static void main(String[] args) throws Exception{
    /*
     * 1、创建解析器工厂
     * 2、根据解析器工厂来创建解析器
     * 3、通过解析器创建Document 对象来对XML文件进行DOM解析
     */
    
    /*获取节点
    DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
    DocumentBuilder db= dbf.newDocumentBuilder();
    Document doc=db.parse("src/jaxp/demo/01.xml");
    NodeList list=doc.getElementsByTagName("name");
    for(int i=0;i<list.getLength();i++)
    {
        Node d=list.item(i);
        String s=d.getFirstChild().getNodeValue();
        String s=d.getTextContent();
        System.out.println(s);
    }*/
    
/*    DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
    DocumentBuilder db= dbf.newDocumentBuilder();
    Document doc=db.parse("src/jaxp/demo/01.xml");
    NodeList list=doc.getElementsByTagName("name");
    list.item(0).getTextContent();*/
    
    //添加节点
    /*DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
    DocumentBuilder db= dbf.newDocumentBuilder();
    Document doc=db.parse("src/jaxp/demo/01.xml");
    NodeList list=doc.getElementsByTagName("p");
    Node d=list.item(0);
    Element ele=doc.createElement("sex");
    Text t=doc.createTextNode("21");
    ele.appendChild(t);
    d.appendChild(ele);
    //回写XML
    TransformerFactory tf=TransformerFactory.newInstance();
    Transformer tfor=tf.newTransformer();
    tfor.transform(new DOMSource(doc), new StreamResult("src/jaxp/demo/01.xml"));*/
    
    //修改节点
    /*DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
    DocumentBuilder db=dbf.newDocumentBuilder();
    Document d=db.parse("src/jaxp/demo/01.xml");
    d.getElementsByTagName("sex").item(0).setTextContent("nan");
    TransformerFactory tf=TransformerFactory.newInstance();
    Transformer tfor=tf.newTransformer();
    tfor.transform(new DOMSource(d), new StreamResult("src/jaxp/demo/01.xml"));*/
    
    //删除节点
    /*DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
    DocumentBuilder db=dbf.newDocumentBuilder();
    Document d=db.parse("src/jaxp/demo/01.xml");
    Node dc=d.getElementsByTagName("sex").item(0);
    Node p=dc.getParentNode();
    p.removeChild(dc);
    TransformerFactory tf=TransformerFactory.newInstance();
    Transformer tfor=tf.newTransformer();
    tfor.transform(new DOMSource(d), new StreamResult("src/jaxp/demo/01.xml"));*/
    
    //遍历节点
    DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
    DocumentBuilder db=dbf.newDocumentBuilder();
    Document d=db.parse("src/jaxp/demo/01.xml");
    //XML不同于HTML 空格换行也会被解析  使用递归
    list(d);
    
}

private static void list(Node d) {
    if(d.getNodeType()==Node.ELEMENT_NODE)
    {
        System.out.println(d.getNodeName());
    }
    NodeList list=d.getChildNodes();
    for(int i=0;i<list.getLength();i++)
    {
        Node d1=list.item(i);
        list(d1);
    }
}
}

0 0
原创粉丝点击