java xml解析

2017-10-10  本文已影响27人  帅哥_刷哥

1.介绍

dom解析
sax解析
jdom解析
dom4j解析
StAX 解析

2.dom解析

//1.DOM介绍
文档对象模型( Document Object Model )
DOM把XML文档映射成一个倒挂的树

//2.步骤
  创建解析器工厂对象
  由解析器工厂对象创建解析器对象
  由解析器对象对指定XML文件进行解析,构建相应DOM树,创建Document对象
  以Document对象为起点对DOM树的节点进行增删改查操作使用

//3.获得代表文件的Document
public Document getDocument(){
    try {
        File file = new File("D://students.xml");
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = factory.newDocumentBuilder();
        Document document = documentBuilder.parse(file);
        return document;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

//4.获得根元素
public void elementMethod(){
    Document document = getDocument();
    NodeList elementsByTagName = document.getElementsByTagName("student");
    //1.getLength() 集合的长度
    for(int index = 0;index<elementsByTagName.getLength();index++){
        //2.item(index) 根据下标获取指定位置的Element
        Element element = (Element)elementsByTagName.item(index);
        //3.getTagName()获得标签名
        String tagName = element.getTagName();
        System.out.println(tagName);
        //4.getNodeName()获得标签名
        String nodeName = element.getNodeName();
        System.out.println(nodeName);
        //5.获得某个属性的值
        String attribute = element.getAttribute("id");
        System.out.println(attribute);
        //6.获得某个属性被封装后的节点
        Attr attributeNode = element.getAttributeNode("id");
        //7.获得第一个子节点
        Node firstChild = element.getFirstChild();
        //8.获得最后一个子节点
        Node lastChild = element.getLastChild();
        //9.获得父节点
        Node parentNode = element.getParentNode();
        //10.获得下一个兄弟节点
        Node nextSibling = element.getNextSibling();
        System.out.println(nextSibling);
        //11.获得上一个兄弟节点
        Node previousSibling = element.getPreviousSibling();
        //12.获得元素的类型 Node.ELEMENT_NODE
        short nodeType = element.getNodeType();
        System.out.println(nodeType);
        //13.获得元素value属性的值
        String nodeValue = element.getNodeValue();
        System.out.println(nodeValue);
        //14.获得元素的前缀
        String prefix = element.getPrefix();
        System.out.println(prefix);
        //15.获得元素开始标签和结束标签之间的文本值
        String textContent = element.getTextContent();
        System.out.println(textContent);
        //16.获得所有属性的集合
        NamedNodeMap attributes = element.getAttributes();
        System.out.println(attributes);
        //getLength()是获取集合的长度
        for(int i=0;i<attributes.getLength();i++){
            //item(i)根据下标获取指定位置的元素
            Element item = (Element)attributes.item(i);
        }
        //17.获得所有的子节点
        NodeList childNodes = element.getChildNodes();
        System.out.println(childNodes);
        //getLength()是获取集合的长度
        for(int i = 0;i<childNodes.getLength();i++){
            //item(i)根据下标获取指定位置的元素
            Element item = (Element)childNodes.item(i);
        }
    }
}

//5.写入xml文件
public void save2Xml(Document document){
    try {
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        DOMSource xmlSource = new DOMSource(document);   //DOM源
        File file = new File("D:\\students.xml");
        StreamResult outputTarget = new StreamResult(file);//构建流
        transformer.transform(xmlSource, outputTarget);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

//6.新增节点与属性
public void addNode(Document document){
    //document是文档对象
    Element element = document.createElement("student");
    ////属性
    Attr attr = document.createAttribute("id");
    attr.setValue("s003");  //设置值 
    element.setAttributeNode(attr); //添加
    //子节点
    Element e = document.createElement("name");
    e.setTextContent("王五");
    element.appendChild(e);  //添加
    Element e1 = document.createElement("age");
    e1.setTextContent("30");
    element.appendChild(e1);  //添加
}

3.sax解析


4.jdom解析


5.dom4j解析


上一篇下一篇

猜你喜欢

热点阅读