-
关于java解析xml文件的问题5
有一个给定标签格式的一个a.xml文件,要根据给定的这个a.xml文件的所有标签重新添加数据后得到一个新的b.xml文件。
给定的a.xml文件标签以及格式可能是不固定的,如何动态的读取a.xml文件中的标签后从新绑定数据后得到一个b.xml文件呢??请各位指点一下。能给出关键代码,小弟更是十分感谢了。
2011年9月07日 10:20
2个答案 按时间排序 按投票排序
-
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
-
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文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
Java解析XML文件是Java开发中常见的一项任务,XML(eXtensible Markup Language)作为一种结构化数据存储格式,被广泛用于数据交换、配置文件和Web服务等场景。本篇文章将详细探讨Java如何利用DOM4J库来解析XML文件...
Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...
Java 实现 XML 解析 Word 文档代码实现 基于给定的文件信息,我们可以总结出以下知识点: 1. Java 实现 XML 解析 Word 文档 Java 可以使用多种方式来解析 Word 文档,包括使用 Apache POI 库、Java2Word 库等。...
JAVA解析XML文件四种方式比较,欢迎下载使用!
本教程将介绍如何使用Java解析XML文件,并将解析结果导入MySQL数据库。 首先,我们需要引入处理XML的Java库——JAXB(Java Architecture for XML Binding)和DOM(Document Object Model)API。JAXB用于对象与XML...
在"Java解析XML性能对比分析Demo"中,你可以通过运行这些解析器的示例代码,观察它们在处理相同XML文件时的内存占用、处理速度等指标,以了解哪种解析方式更适合你的项目需求。例如,如果你处理的XML文件较小,DOM或...
* 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的...
本压缩包“Java解析XML.zip”包含了两个关键的第三方库:jaxen-1.1.1.jar和dom4j-1.6.1.jar,它们是Java解析XML文件的重要工具。 首先,让我们了解一下**DOM4J**。DOM4J是一个强大的Java XML API,它提供了灵活且高...
总结来说,Java解析XML并直接打印的过程包括:创建XML解析器,加载并解析XML文件,遍历和提取XML内容,以及实现打印逻辑。这个过程涉及了Java的XML处理、I/O操作和打印API的使用。通过这种方式,开发者可以在不显示...
Java 解析 XML 文件的 DOM 和 SAX 方式 Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种...
java解析xml的四种方法的比较,还有四种方法所用到的jar包 附带程序例子 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
`parse()`方法解析XML文件,并调用自定义的`DefaultHandler`子类来处理元素和属性。 三、StAX解析器 StAX(Streaming API for XML)提供了更底层的控制,允许程序逐个读取XML事件。这种方式介于DOM和SAX之间,既有...
这种方式便于对XML进行随机访问,但缺点是内存消耗大,尤其对于大型XML文件,可能会导致性能问题。在Java中,`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`类可用于实现DOM解析。 2. SAX...
在Java编程环境中,XML(可...总的来说,Java解析XML生成JSON对象的能力使得数据在不同平台和应用间无缝交换成为可能。通过学习和使用这样的工具类,开发者可以更高效地处理XML数据,并将其集成到基于JSON的系统中。
总结起来,实现“java解析xml动态生成树形菜单结构”的项目,需要掌握以下核心知识点: 1. Java的DOM解析XML,构建树形数据结构。 2. 设计和实现无限层级的树形菜单数据模型。 3. 使用`JSTree`库在前端渲染树形菜单...
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...
本篇将详细介绍如何使用Java解析XML,将数据存入MongoDB,并返回org.json JSON包。 首先,解析XML通常有两种主要方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM一次性加载整个XML文档到内存...
如果XML文件较小,DOM可能是最佳选择,因为它提供了完整的文档视图。对于大文件,SAX或StAX更为合适,以节省内存。如果需要在Java对象和XML之间进行绑定,JAXB是一个强大的工具。理解这些解析方法的特点和应用场景,...