0 0

关于java解析xml文件的问题5

有一个给定标签格式的一个a.xml文件,要根据给定的这个a.xml文件的所有标签重新添加数据后得到一个新的b.xml文件。
给定的a.xml文件标签以及格式可能是不固定的,如何动态的读取a.xml文件中的标签后从新绑定数据后得到一个b.xml文件呢??请各位指点一下。能给出关键代码,小弟更是十分感谢了。
2011年9月07日 10:20

2个答案 按时间排序 按投票排序

0 0



import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public abstract class AbstractXmlClone {
	private File src;
	private String indents = "\n";

	public AbstractXmlClone(File src) {
		super();
		this.src = src;
	}

	public void copy(File dest, final File dtdFile) throws IOException {
		indents = "";
		XMLWriter writer = new XMLWriter(new FileOutputStream(dest));
		try {

			SAXReader r = new SAXReader(dtdFile != null);
			if (dtdFile != null)
				r.setEntityResolver(new EntityResolver() {

					public InputSource resolveEntity(String publicId, String systemId)
							throws SAXException, IOException {
						return new InputSource(new FileReader(dtdFile));
					}
				});
			Document doc = r.read(src);
			Element root = doc.getRootElement();

			writer.write(doc.getDocType());
			writer.write("\n");
			write(writer, root);
		} catch (DocumentException e) {
			throw new IOException(e.getLocalizedMessage());
		} finally {
			if (writer != null)
				writer.close();
		}
	}

	private void addIndents(XMLWriter writer) throws IOException {
		indents += '\t';
		writer.write(indents);
	}

	private void removeIndents(XMLWriter writer) throws IOException {
		indents = indents.substring(0, indents.length() - 1);
		writer.write(indents);
	}

	private void write(XMLWriter writer, Element node) throws IOException {
		writer.writeOpen(node);
		addIndents(writer);
		writer.write(getData(node));
		Iterator<Element> iter = node.elementIterator();
		while (iter.hasNext()) {
			Element e = iter.next();
			addIndents(writer);
			write(writer, e);
			removeIndents(writer);
		}
		removeIndents(writer);
		writer.writeClose(node);
	}

	public File getSrcFile() {
		return src;
	}

	// 根据标签重新绑定数据
	protected abstract String getData(Element node);

	public static void main(String[] args) throws Exception {
		AbstractXmlClone xc = new AbstractXmlClone(new File("d:/1.xml")) {

			@Override
			protected String getData(Element node) {
				return "xxxxx";
			}
		};
		xc.copy(new File("d:/2.xml"), null);
	}
}

2011年9月08日 11:36
0 0

package com.atom.util;  
 
import java.io.File;  
import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
 
import org.dom4j.Document;  
import org.dom4j.DocumentException;  
import org.dom4j.Element;  
import org.dom4j.io.SAXReader;  
 
import com.atom.basic.columntree.ColumnTree;  
import com.atom.biz.base.calendar.bean.CalenderNode;  
import com.atom.biz.base.setup.BaseSetupNode;  
 
/** 
* <p> 
* 操作xml文件类 
* </p> 
* xml 文件格式为 
*  
* <tables><table><col name="" value="" /><col name="" value="" /></table><table></table></tables> 
*  
* @author KHT * @version $Id: XmlUtil.java,v 0.1 2009-2-22 下午10:49:02  */ 
 
public class XmlUtil {  
 
    /** 
     * <p> 
     * 读取数据的xml文件 
     * </p> 
     *  
     * @author Jack Zhou 
     * @version $Id: XmlUtil.java,   */ 
    @SuppressWarnings("unchecked")  
    public static List<BaseSetupNode> readBaseNodes(String path) {  
        List<BaseSetupNode> list = new ArrayList<BaseSetupNode>();  
        SAXReader reader = new SAXReader();  
        Document doc = null;  
        String leaf = "";  
        try {  
            // 读取文件  
            File in = new File(path);  
            doc = reader.read(in);  
            Element root = doc.getRootElement();  
            List<Element> eles = root.elements("nodes");  
            List<Element> cols = null;  
            for (Element ele : eles) {  
                cols = ele.elements();  
                for (Element element : cols) {  
                    BaseSetupNode node = new BaseSetupNode();  
                    node.setFz(element.attributeValue("fz"));  
                    node.setMc(element.attributeValue("mc"));  
                    node.setSm(element.attributeValue("sm"));  
                    leaf = element.attributeValue("leaf");  
                    node.setUiProvider("col");  
                    node.setId(element.attributeValue("id"));  
                    node.setParentId(element.attributeValue("parantid"));  
                    node.setHref(element.attributeValue("href"));  
                    if ("".equals(leaf) || "0".equals(leaf)) {  
                        node.setLeaf(false);  
                        node.setIconCls("task");  
                    } else {  
                        node.setLeaf(true);  
                        node.setIconCls("task-folder");  
                    }  
                    list.add(node);  
                }  
            }  
        } catch (DocumentException e) {  
            e.printStackTrace();  
        }  
        return list;  
    }  
 
    public static List<CalenderNode> readCalenderNodes(String path) {  
        List<CalenderNode> list = new ArrayList<CalenderNode>();  
        SAXReader reader = new SAXReader();  
        Document doc = null;  
        String leaf = "";  
        try {  
            // 读取文件  
            File in = new File(path);  
            doc = reader.read(in);  
            Element root = doc.getRootElement();  
            List<Element> eles = root.elements("nodes");  
            List<Element> cols = null;  
            String isv = "";  
            for (Element ele : eles) {  
                cols = ele.elements();  
                for (Element element : cols) {  
                    CalenderNode node = new CalenderNode();  
                    node.setDateType(element.attributeValue("dateType"));  
                    node.setDateName(element.attributeValue("dateName"));  
                    node.setDate(element.attributeValue("date"));  
                    node.setMemo(element.attributeValue("memo"));  
                    isv = element.attributeValue("visible");  
                    if (!StringUtil.isEmpty(isv))  
                        node  
                                .setVisible("<img src='/public/images/Checkmark4.gif' />");  
                    else 
                        node.setVisible("-");  
                    leaf = element.attributeValue("leaf");  
                    node.setUiProvider("col");  
                    node.setId(element.attributeValue("id"));  
                    node.setParentId(element.attributeValue("parantid"));  
                    node.setHref(element.attributeValue("href"));  
                    if ("".equals(leaf) || "0".equals(leaf)) {  
                        node.setLeaf(false);  
                        node.setIconCls("task");  
                    } else {  
                        node.setLeaf(true);  
                        node.setIconCls("task-folder");  
                    }  
                    list.add(node);  
                }  
            }  
        } catch (DocumentException e) {  
            e.printStackTrace();  
        }  
        return list;  
    }  
 
    @SuppressWarnings("unchecked")  
    public List<Map<String, String>> readMapTest() {  
        List<Map<String, String>> list = new ArrayList<Map<String, String>>();  
        String path = this.getClass().getResource("/").getPath()  
                + "/xml/test.xml";  
        SAXReader reader = new SAXReader();  
        Document doc = null;  
        try {  
            // 读取文件  
            File in = new File(path);  
            doc = reader.read(in);  
            Element root = doc.getRootElement();  
            List<Element> eles = root.elements("nodes");  
            List<Element> cols = null;  
            for (Element ele : eles) {  
                cols = ele.elements();  
                for (Element element : cols) {  
                    Map<String, String> map = new HashMap<String, String>();  
                    map.put("childrows", element.attributeValue("childrows"));  
                    map.put("hc0", element.attributeValue("hc0"));  
                    map.put("hc1", element.attributeValue("hc1"));  
                    map.put("hc2", element.attributeValue("hc2"));  
                    map.put("hc3", element.attributeValue("hc3"));  
                    map.put("hasnote", element.attributeValue("hasnote"));  
                    map.put("urid", element.attributeValue("urid"));  
                    map.put("entityid", element.attributeValue("entityid"));  
                    map.put("bankid", element.attributeValue("bankid"));  
                    list.add(map);  
                }  
            }  
        } catch (DocumentException e) {  
            e.printStackTrace();  
        }  
        return list;  
    }  
 
    public static void main(String[] args) {  
        XmlUtil xml = new XmlUtil();  
        String path = xml.getClass().getResource("/").getPath();  
        List<BaseSetupNode> nodes = XmlUtil.readBaseNodes(path  
                + "/xml/base.xml");  
        ColumnTree t = new ColumnTree();  
        System.out.println(t.getJsonString(nodes));  
        // System.out.println(nodes.size());  
        // System.out.println(path);  
 
    }  
 

2011年9月07日 10:54

相关推荐

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    java解析XML文件

    Java解析XML文件是Java开发中常见的一项任务,XML(eXtensible Markup Language)作为一种结构化数据存储格式,被广泛用于数据交换、配置文件和Web服务等场景。本篇文章将详细探讨Java如何利用DOM4J库来解析XML文件...

    java 解析xml 多级

    Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...

    java实现xml解析word文档代码实现

    Java 实现 XML 解析 Word 文档代码实现 基于给定的文件信息,我们可以总结出以下知识点: 1. Java 实现 XML 解析 Word 文档 Java 可以使用多种方式来解析 Word 文档,包括使用 Apache POI 库、Java2Word 库等。...

    java解析XML的四种方式

    JAVA解析XML文件四种方式比较,欢迎下载使用!

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    本教程将介绍如何使用Java解析XML文件,并将解析结果导入MySQL数据库。 首先,我们需要引入处理XML的Java库——JAXB(Java Architecture for XML Binding)和DOM(Document Object Model)API。JAXB用于对象与XML...

    java 解析XML性能对比分析Demo

    在"Java解析XML性能对比分析Demo"中,你可以通过运行这些解析器的示例代码,观察它们在处理相同XML文件时的内存占用、处理速度等指标,以了解哪种解析方式更适合你的项目需求。例如,如果你处理的XML文件较小,DOM或...

    Java解析XML工具类--(java源码)

    * 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的...

    Java解析XML.zip

    本压缩包“Java解析XML.zip”包含了两个关键的第三方库:jaxen-1.1.1.jar和dom4j-1.6.1.jar,它们是Java解析XML文件的重要工具。 首先,让我们了解一下**DOM4J**。DOM4J是一个强大的Java XML API,它提供了灵活且高...

    java 解析xml并打印输出

    总结来说,Java解析XML并直接打印的过程包括:创建XML解析器,加载并解析XML文件,遍历和提取XML内容,以及实现打印逻辑。这个过程涉及了Java的XML处理、I/O操作和打印API的使用。通过这种方式,开发者可以在不显示...

    Java解析XML文件的DOM和SAX方式.doc

    Java 解析 XML 文件的 DOM 和 SAX 方式 Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种...

    Java解析XML的jar包+四种解析方法

    java解析xml的四种方法的比较,还有四种方法所用到的jar包 附带程序例子 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    java解析xml例子

    `parse()`方法解析XML文件,并调用自定义的`DefaultHandler`子类来处理元素和属性。 三、StAX解析器 StAX(Streaming API for XML)提供了更底层的控制,允许程序逐个读取XML事件。这种方式介于DOM和SAX之间,既有...

    JAVA解析XML示例

    这种方式便于对XML进行随机访问,但缺点是内存消耗大,尤其对于大型XML文件,可能会导致性能问题。在Java中,`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`类可用于实现DOM解析。 2. SAX...

    java解析xml生成json对象

    在Java编程环境中,XML(可...总的来说,Java解析XML生成JSON对象的能力使得数据在不同平台和应用间无缝交换成为可能。通过学习和使用这样的工具类,开发者可以更高效地处理XML数据,并将其集成到基于JSON的系统中。

    java解析xml动态生成树形菜单结构

    总结起来,实现“java解析xml动态生成树形菜单结构”的项目,需要掌握以下核心知识点: 1. Java的DOM解析XML,构建树形数据结构。 2. 设计和实现无限层级的树形菜单数据模型。 3. 使用`JSTree`库在前端渲染树形菜单...

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    Java 解析xml 存入mongodb 返回org.json json包

    本篇将详细介绍如何使用Java解析XML,将数据存入MongoDB,并返回org.json JSON包。 首先,解析XML通常有两种主要方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM一次性加载整个XML文档到内存...

    详 解Java解析XML

    如果XML文件较小,DOM可能是最佳选择,因为它提供了完整的文档视图。对于大文件,SAX或StAX更为合适,以节省内存。如果需要在Java对象和XML之间进行绑定,JAXB是一个强大的工具。理解这些解析方法的特点和应用场景,...

Global site tag (gtag.js) - Google Analytics