关闭

演示使用DOM技术如何根据指定XML,进行相应的修改然后生成新的XML文档

295人阅读 评论(0) 收藏 举报
分类:
import java.io.File;
import java.io.FileOutputStream;

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;

/**
 * 演示使用DOM技术如何根据指定XML,进行相应的修改然后生成新的XML文档
 *
 * @version 1.0
 *
 *
 */
public class DOMParseXML {
    /**
     * 修改XML指定的节点的内容
     *
     * @param NodeList
     *            nodeList 从指定XML文档中取出的节点的集合
     */
    public void modifyNod(NodeList nodeList) {
        int size = nodeList.getLength();
        for (int k = 0; k < size; k++) {
            Node node = nodeList.item(k);

            if (node.getNodeType() == Node.TEXT_NODE) {
                Text textNode = (Text) node;
                int length = textNode.getLength();
                String str = textNode.getWholeText().trim();

                try {
                    double d = Double.parseDouble(str);
                    if (d >= 90 && d <= 100) {
                        textNode.insertData(length, "(优秀)");
                    } else if (d >= 80 && d < 90) {
                        textNode.insertData(length, "(良好)");
                    } else if (d >= 60 && d < 80) {
                        textNode.insertData(length, "(及格)");
                    } else {
                        textNode.insertData(length, "(不及格)");
                    }
                } catch (NumberFormatException ex) {

                }
            }
            
            if(node.getNodeType() == Node.ELEMENT_NODE) {
                Element elementNode = (Element) node;
                
                if(elementNode.hasChildNodes()) {
                    elementNode.setAttribute("examKind", "闭卷");
                }
                
                NodeList nodes = elementNode.getChildNodes();
                modifyNod(nodes);
            }

        }
    }

    public static void main(String[] args) {
        Document document = null;
        // 通过DocumentBuilderFactory抽象类的工厂方法newInstance()创建DOM解析器的工厂实例
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            // 通过DocumentBuilderFactory实例的静态方法newDocument()得到DOM解析器
            DocumentBuilder builder = factory.newDocumentBuilder();
            // 根据指定文件建立Document
            document = builder.parse(new File("D://examGrade.xml"));
            // 通过Document得到XMl文档的根节点
            Element root = document.getDocumentElement();
            // DOM技术采用NodeList存放Node的所有子节点,所以我们可以使用循环的方式得到节点下的所有子节点
            NodeList nodeList = root.getChildNodes();
            DOMParseXML ganerateXML = new DOMParseXML();
            // 调用修改XML指定的节点的内容的方法
            ganerateXML.modifyNod(nodeList);
            // 建立TransformerFactory工厂实例
            TransformerFactory transformerFactory = TransformerFactory
                    .newInstance();
            // 使用工厂实例创建Transformer对象
            Transformer transformer = transformerFactory.newTransformer();
            // 将变换后的Document封装到DOMSource对象中
            DOMSource domSource = new DOMSource(document);
            // 准备新文件输出流,将输出流放入StreamResult对象中
            File file = new File("D://newXML.xml");
            FileOutputStream out = new FileOutputStream(file);
            StreamResult xmlResult = new StreamResult(out);
            // 使用Transformer实例的transform方法进行转换,将变换的内容映射到新的XML文档中,完成工作
            transformer.transform(domSource, xmlResult);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

0
0
查看评论

Java&Xml教程(四)使用DOM方式生成XML文件

在前面的教程中,我们学习了使用DOM解析方式读取和修改XML文件内容,今天我们来学习如何使用DOM解析机制生成XML文件。 下面是我们对要生成的XML文件的具体要求: 1.根节点元素为”Employees”,命名空间为”http://www.journaldev.com/employee“,根节...
  • Rongbo_J
  • Rongbo_J
  • 2015-12-10 21:22
  • 2002

利用DOM解析和创建xml文件

XML解析器是指可以解析XML文件的程序 常见解析器有 1.     SAX解析器,用于XML的简单API 2.     DOM解析器,文档对象模型 文档对象模型就是利用对象来把文档模型化,这些模型不仅描述了文档...
  • moonhelena
  • moonhelena
  • 2016-07-20 23:03
  • 390

jaxp解析器用dom方式操作xml文档的总结

1. xml解析技术概述  解析xml文档一般有两种技术:dom(Document Object Model)和sax(Simple API for XML)。dom即文档对象模型,是W3C组织推荐的处理xml的一种方式;sax不是官方标准,但它是xml社区事实上的标准,几乎所有的xml解析器都支持...
  • eson_15
  • eson_15
  • 2016-05-26 18:48
  • 2622

XML-解析技术(dom解析,sax解析)

XML解析方式分为两种:dom和sax    dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。    sax: (Simple API for XML) 不是官方标准,但它是 XML ...
  • WillCold
  • WillCold
  • 2013-10-25 08:50
  • 1202

Dom解析和生成XML文档

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/article/details/9774597 一、前言     ...
  • ch656409110
  • ch656409110
  • 2013-09-14 00:21
  • 4595

sax和dom在解析xml文档时有什么区别

当你需要处理XML文档时,你的首要选择是使用DOM(文档对象模型)还是使用SAX(用于XML的简单API),即当前使用的两个主要的XML API。你可以使用任何一种(或者在同一时间使用两种)来处理XML文档,然而DOM将文档载入到内存中处理,而SAX则相反,它可以检测一个即将到来的 XML流,由此并...
  • zhupengqq
  • zhupengqq
  • 2016-04-18 18:31
  • 1305

Java解析xml文档之DOM解析--CRUD(增删改查)

DOM-Document Object Model-文档对像模型。是w3c组织处理xml的一种方式。特点:一次将所有数据全部加载到内存中。 对xml文档中的每一个节点都当成一个Node对像处理。包括元素、文本、属性。 org.w3c.dom包中的Document,Element,Node。 非...
  • new___Smile
  • new___Smile
  • 2016-06-29 16:35
  • 1960

python使用dom操作xml

1、xml的内容为del.xml,如下 4 Python test Zope
  • q357010621
  • q357010621
  • 2016-08-27 11:52
  • 841

[XML]JAVA解析XSD,并根据选择节点生成XSL

xml,xsd,xsl
  • cubuntu
  • cubuntu
  • 2010-06-12 16:18
  • 5878

使用DOM创建和写入xml文件

上一篇文章介绍了使用DOM解析xml文件的方式,这篇文章将介绍如何使用DOM创建和写入xml文件。 与xml的解析操作一样,在使用DOM创建和写入xml文件的时候,也需要获取一个DocumentBuilderFactory类型的对象builderFactory,并通过builderFactory的...
  • a23qws
  • a23qws
  • 2015-02-21 13:34
  • 645
    个人资料
    • 访问:26704次
    • 积分:1109
    • 等级:
    • 排名:千里之外
    • 原创:85篇
    • 转载:3篇
    • 译文:3篇
    • 评论:1条
    最新评论