解析XML文件——DOM基本操作

来源:互联网 发布:淘宝手机贷款 编辑:程序博客网 时间:2024/06/05 18:51

1.DOM的常用方法

1)Document接口常用方法

方法 说明 public NodeList getELementsByTagName(String tagName) 取得指定名称的NodeList public Element createElement(String tagName) throws DOMException 创建一个指定名称的节点 public Text createTextNode(String data) 创建一个文本内容节点 Element createElement(String tagName) throws DOMException 创建一个节点元素 public Attr createAttribute(String name) throws DOMException 创建一个属性



2)Node接口常用方法

方法 说明 Node appendChild(Node newChile) throws DOMException 在当前节点下增加一个新节点 public NodeList getChildNodes() 取得本节点的全部子节点 public Node getFirstChild() 取得本节点的第一个子节点 public Node getLastChild() 取得本节点的最后一个子节点 public boolean hasChildNodes() 判断是否还有其他节点 public boolean hasAttributes() 判断是否还有其他属性 String getNodeValue() throws DOMException 取得节点内容



3)NodeList接口常用方法

方法 说明 public int getLength() 取得节点个数 public Node item(int index) 根据索引取得节点对象



4)StreamResult类的构造方法

方法 说明 public StreamResult(File f) 指定输出文件 public StreamResult(OutputStream outputStream) 指定输出的输出流

2.DOM解析XML文件

//DOM解析XML文件示例//假设已导入所需的包public class Main {    public static void main(String args[]) {        //建立DocumentBuilderFactory,用于取得DocumentBuilder        DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();        DocumentBuilder bui = null;        try {            //通过DocumentBuilderFactory,取得DocumentBuilder            bui = fac.newDocumentBuilder();        } catch (ParserConfigurationException e) {            e.printStackTrace();        }        Document doc = null;        try {            //读取指定路径的xml文件            doc = bui.parse("C:" +                    File.separator + "DomDemo1.xml");        } catch (SAXException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        //查找'link'节点        NodeList nl = doc.getElementsByTagName("link");        //输出nl中,第一个子节点中的文本节点内容        for (int x = 0; x < nl.getLength(); x++) {            Element e = (Element) nl.item(x);            /*            item(0).getFirstChile()为取得第一个子节点的第一个文本节点            但是若是'link'中有多个节点,就可以改变index,            如:改为item(1)就会输出第二个name的value            */            System.out.print("name:" + e.getElementsByTagName("name").item                    (0).getFirstChild().getNodeValue());            System.out.println("  age:" + e.getElementsByTagName("age").item                    (0).getFirstChild().getNodeValue());        }    }}

3.DOM生成XML文件

//DOM生成XML文件示例//假设已导入所需的包public class Main {    public static void main(String args[]) {        //建立DocumentBuilderFactory,以取得DocumentBuilder        DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();        DocumentBuilder bul = null;        try {            //通过DocumentBuilderFactory,取得DocumentBuilder            bul = fac.newDocumentBuilder();        } catch (ParserConfigurationException e) {            e.printStackTrace();        }        //定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作        Document doc = null;        //创建一个新文档        doc = bul.newDocument();        //建立各个操作节点        Element stulist = doc.createElement("stulist");        Element link1 = doc.createElement("link");        Element link2 = doc.createElement("link");        Element name1 = doc.createElement("name");        Element age1 = doc.createElement("age");        Element name2 = doc.createElement("name");        Element age2 = doc.createElement("age");        //设置文本内容        name1.appendChild(doc.createTextNode("aa"));        age1.appendChild(doc.createTextNode("17"));        name2.appendChild(doc.createTextNode("bb"));        age2.appendChild(doc.createTextNode("18"));        //设置节点关系        link1.appendChild(name1);  //子节点        link1.appendChild(age1);        link2.appendChild(name2);        link2.appendChild(age2);        stulist.appendChild(link1);        stulist.appendChild(link2);        doc.appendChild(stulist);  //文档上保存节点        //输出文档到文件中        TransformerFactory tf = TransformerFactory.newInstance();        Transformer t = null;        try {            t = tf.newTransformer();        } catch (TransformerConfigurationException e) {            e.printStackTrace();        }        //设置字符编码        t.setOutputProperty(OutputKeys.ENCODING,"utf-8");        //输出文档        DOMSource sou = new DOMSource(doc);        //指定输出位置        StreamResult res = new StreamResult(new File("C:" + File.separator + "DomDemo2.xml"));        try {            //输出            t.transform(sou,res);        } catch (TransformerException e) {            e.printStackTrace();        }    }}