XML(九)-使用DOM来生成xml文档

来源:互联网 发布:易语言客户端发送数据 编辑:程序博客网 时间:2024/05/16 17:22
使用DOM来生成xml文档

对于生成xml文档来说需要以下几个类的支持

 

下面这端代码就是生成图中的xml文档的

package cn.org.kingdom.dom;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.OutputKeys;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.Attr;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;public class DomCreateDemo {    public static void main(String[] args) throws Exception {        // 建立DocumentBuilderFactory对象        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        DocumentBuilder db = null;        Document doc = null;        db = dbf.newDocumentBuilder();        doc = db.newDocument();        // 建立节点        Element student = doc.createElement("student");        // 创建属性节点        Node sex = (Node) doc.createAttribute("sex");        // 设置属性节点的值        sex.setNodeValue("男");        // 设置属性节点到student节点上        student.setAttributeNode((Attr) sex);        // 建立id节点        Element id = doc.createElement("id");        // 建立名字节点        Element name = doc.createElement("name");        // 建立年龄节点        Element age = doc.createElement("age");        // 为id节点添加内容        id.appendChild(doc.createTextNode("id01"));        // 为name节点添加内容        name.appendChild(doc.createTextNode("张三"));        // 为年龄节点添加内容        age.appendChild(doc.createTextNode("15"));        // 将三个子节点加入到父节点中        student.appendChild(id);        student.appendChild(name);        student.appendChild(age);        // 将根元素加入到根节点上        doc.appendChild(student);        // 输出文档到文件        TransformerFactory tf = TransformerFactory.newInstance();        Transformer t = null;        t = tf.newTransformer();        // 设置编码        // 创建源t.setOutputProperty(OutputKeys.ENCODING)        DOMSource ds = new DOMSource(doc);        // 创建目标        StreamResult result = new StreamResult(new File("src/output.xml"));        // 输出        t.transform(ds, result);    }}

下面再来看一个例子,如何使用DOM来解析任意的XML文档(这里不考虑一些复杂的xml)

xml文档的原型如下

<?xml version="1.0"  encoding="UTF-8" standalone="yes"?><persons>    <!-- this is comment -->    <person id = "p01">        <name>张三</name>        <age>15</age>        <address>南京市</address>    </person>    <person id = "p02">        <name>李小龙</name>        <age>20</age>        <address>美国</address>    </person></persons>

下面是java代码

package cn.org.kingdom.dom;import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Attr;import org.w3c.dom.Comment;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;/** * 解析整个XML文档 * 递归操作 */public class TestDemo03 {    public static void main(String[] args) {        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        try {            DocumentBuilder db = dbf.newDocumentBuilder();            Document doc = db.parse(new File("src/test2.xml"));            Element root = doc.getDocumentElement();            parseElement(root);        } catch (ParserConfigurationException e) {            e.printStackTrace();        } catch (SAXException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    private static void parseElement(Element el) {        String tagName =el.getTagName();        NodeList list = el.getChildNodes();        System.out.print("<"+tagName);        //判断是否有属性        NamedNodeMap mnm  = el.getAttributes();        if(mnm!=null) {            for (int i = 0; i < mnm.getLength(); i++) {                Attr attr = (Attr) mnm.item(i);                String attr_name = attr.getName();                String attr_value = attr.getValue();                System.out.print(" "+attr_name+"=\""+attr_value+"\"");            }        }        System.out.print(">");        for (int i = 0; i < list.getLength(); i++) {            Node node = list.item(i);            if(node.getNodeType()==node.ELEMENT_NODE) {                parseElement((Element) node);            }else if(node.getNodeType()==node.TEXT_NODE) {                System.out.print(node.getNodeValue());            }else if(node.getNodeType()==node.COMMENT_NODE){                System.out.println("<!--"+((Comment)node).getData()+"-->");            }        }        System.out.println("</"+tagName+">");    }}

更多内容,请参考Java api

原创粉丝点击