dom解析和生成XML文件

简介:

使用这种方式解析时,需要使用node.getNodeType() == Node.ELEMENT_NODE判断结点是否为元素结点,否则会输出很多#text(结点前有空格存在的原因)。

完成的XML解析和生成代码如下:

package test;

import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Source;
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.NodeList;
import org.w3c.dom.Node;

class XMLHelper {
    /**
     * 解析XML
     * @param filename 要解析的XML的文件名
     */
    public static void resolveXML(String filename) {
        File f = new File(filename);
        DocumentBuilderFactory factory = null;
        DocumentBuilder db = null;
        Element element = null;
        try {
            //获得DOM解析器工厂
            factory = DocumentBuilderFactory.newInstance();
            //获取具体的DOM解析器
            db = factory.newDocumentBuilder();
            //解析一个xml文档,获得Document对象(根节点)
            Document document = db.parse(f);
            element = document.getDocumentElement();

            System.out.println("Root: " + element.getNodeName());
            NodeList childNodes = element.getChildNodes();
            for (int i = 0; i < childNodes.getLength(); i++) {
                Node node = childNodes.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    System.out.println(node.getNodeName());
                    NodeList nodes = node.getChildNodes();
                    for (int j = 0; j < nodes.getLength(); j++) {
                        Node temp = nodes.item(j);
                        if (temp.getNodeType() == Node.ELEMENT_NODE) {
                            System.out.println("    " + temp.getNodeName() + 
                                ": " + temp.getTextContent());
                        }
                    }
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 生成XML文件
     * @param filename 将生成的XML输出到该文件
     */
    public static void CreateXML(String filename) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = factory.newDocumentBuilder();
            Document document = db.newDocument();
            Element root = document.createElement("bookstore");

            //add book
            Element book = document.createElement("book");
            book.setAttribute("category", "COOKING");
            //book.title
            Element title = document.createElement("title");
            title.setAttribute("lang", "en");
            title.setTextContent("Everyday Italian");
            book.appendChild(title);
            //book.author
            Element author = document.createElement("author");
            author.setTextContent("Giada De Laurentiis");
            book.appendChild(author);
            //book.year
            Element year = document.createElement("year");
            year.setTextContent("2005");
            book.appendChild(year);
            //book.price
            Element price = document.createElement("price");
            price.setTextContent("30.00");
            book.appendChild(price);
            root.appendChild(book);

            //add book
            book = document.createElement("book");
            book.setAttribute("category", "CHILDREN");
            //book.title
            title = document.createElement("title");
            title.setAttribute("lang", "en");
            title.setTextContent("Harry Potter");
            book.appendChild(title);
            //book.author
            author = document.createElement("author");
            author.setTextContent("J K. Rowling");
            book.appendChild(author);
            //book.year
            year = document.createElement("year");
            year.setTextContent("2005");
            book.appendChild(year);
            //book.price
            price = document.createElement("price");
            price.setTextContent("39.99");
            book.appendChild(price);
            root.appendChild(book);

            //add book
            book = document.createElement("book");
            book.setAttribute("category", "WEB");
            //book.title
            title = document.createElement("title");
            title.setAttribute("lang", "en");
            title.setTextContent("Learning XML");
            book.appendChild(title);
            //book.author
            author = document.createElement("author");
            author.setTextContent("Erik T. Ray");
            book.appendChild(author);
            //book.year
            year = document.createElement("year");
            year.setTextContent("2003");
            book.appendChild(year);
            //book.price
            price = document.createElement("price");
            price.setTextContent("39.95");
            book.appendChild(price);
            root.appendChild(book);

            document.appendChild(root);
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            Source xmlSource = new DOMSource(document);
            StreamResult outputTarget = new StreamResult(new File(filename));
            transformer.transform(xmlSource, outputTarget);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

public class Main {
    public static void main(String[] args) throws Exception{
        String filename = "E:\\Eclipse Project\\WebTest\\WebContent\\myxml1.xml";
        XMLHelper.resolveXML(filename);
        filename = "E:\\Eclipse Project\\WebTest\\WebContent\\myxml2.xml";
        XMLHelper.CreateXML(filename);
    }
}

输入的XML文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title> 
  <author>Giada De Laurentiis</author> 
  <year>2005</year> 
  <price>30.00</price> 
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title lang="en">Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore>

解析函数的输出如下:

Root: bookstore
book
    title: Everyday Italian
    author: Giada De Laurentiis
    year: 2005
    price: 30.00
book
    title: Harry Potter
    author: J K. Rowling
    year: 2005
    price: 39.99
book
    title: Learning XML
    author: Erik T. Ray
    year: 2003
    price: 39.95


转载:http://blog.csdn.net/foreverling/article/details/50150111

目录
相关文章
|
1天前
|
Android开发
android string.xml文件中的整型和string型代替
android string.xml文件中的整型和string型代替
|
1天前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
7 1
|
1天前
|
XML JavaScript 数据格式
Beautiful Soup 库的工作原理基于解析器和 DOM(文档对象模型)树的概念
Beautiful Soup 使用解析器(如 html.parser, lxml, html5lib)解析HTML/XML文档,构建DOM树。它提供方法查询和操作DOM,如find(), find_all()查找元素,get_text(), get()提取信息。还能修改DOM,添加、修改或删除元素,并通过prettify()输出格式化字符串。它是处理网页数据的利器,尤其在处理不规则结构时。
6 2
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML解析器是浏览器内置工具,用于将XML转换为JavaScript可操作的XML DOM对象,允许遍历、修改节点。大多数现代浏览器支持这一功能。以下JS代码示例展示了如何加载XML文档&quot;books.xml&quot;
|
1天前
|
XML 安全 API
AndroidManifest.xml文件综合详解
AndroidManifest.xml文件综合详解
|
1天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
|
11天前
|
弹性计算 运维 Shell
|
11天前
|
前端开发 JavaScript
浏览器通过构建DOM树来解析HTML代码
【4月更文挑战第30天】浏览器通过构建DOM树来解析HTML代码
24 1
|
4天前
|
Java Android开发
Android12 双击power键启动相机源码解析
Android12 双击power键启动相机源码解析
13 0
|
1天前
PandasTA 源码解析(一)(2)
PandasTA 源码解析(一)
7 0

推荐镜像

更多