package org.jdom; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; import org.jdom.xpath.XPath; import thtf.ebuilder.Config; /** * XML简化操作类 * * @author kettas 3:11:54 PM */ public class XML { private static Document document = null; /** * 是否存在此文件 <br> * 如果不存在就抛出异常,存在就返回此文件 * * @param file 文件对象 * @return File * @throws IOException */ protected static File readFile(File file) throws IOException { try { if (file.exists()) { return file; } } catch (Exception e) { throw new IOException("找不到文件" + e.getMessage()); } throw new IOException("找不到文件"); } /** * <pre> * 将文件转换为Document对象 * <code>Document doc=XML.fileToDocument(new File("c://abc/a.xml"));</code> * </pre> * @param file 文件路径 * @return Document * @throws JDOMException */ public static Document fileToDocument(File file) throws JDOMException { try { document = new SAXBuilder(false).build(readFile(file)); return document; } catch (IOException e) { document=null; e.printStackTrace(); throw new JDOMException("Can't find ["+file.getPath()+"]file !"); }catch (Exception e) { document=null; throw new JDOMException(e.getMessage()); } } /** * <pre>自定义表达式的方式来读取配置文件信息:并指定你需要操作的文件的路径 * <code>List list=XML.fileToDocument(new File("c://abc/a.xml"));</code></pre> * @param file xml 文件路径 * @param express xpath查询表达式 * @return List<Element> * @throws JDOMException */ public static List queryToElementList(File file, String express) throws JDOMException { return queryToElementList(file, XPath.newInstance(express)); } /** * 根据您的设置的Xpath语法查询XML文件并返回查询结果 * <pre> * File file=new File("c:\\rss.xml"); * List list=XML.queryToElementList(file,XPath.newInstance("/rss/channel/title")); * for(Element e:list){ * System.out.println("名称:"+e.getText()); * } * </pre> * @param file * @param xPath * @return List * @throws JDOMException */ public static List queryToElementList(File file, XPath xPath) throws JDOMException { return xPath.selectNodes(fileToElement(file)); } /** * 根据您的设置的Xpath语法查询Document并返回查询结果 * <pre> * Document doc=XML.fileToDocument(new File("c:/xml.xml")); * List list=org.jdom.XML.queryToElementList(doc,"/rss/channel/title"); * for(Element e:list){ * System.out.println("名称:"+e.getText()); * } * </pre> * @param doc * @param express * @return List * @throws JDOMException */ public static List queryToElementList(Document doc, String express) throws JDOMException { return XPath.newInstance(express).selectNodes(doc); } /** * 查询文件顶层节点. * @param file 文件路径 * @return Element * @throws JDOMException */ public static Element fileToElement(File file) throws JDOMException{ return fileToDocument(file).getRootElement(); } /** * 查询文件所有节点. * @param file * @return List * @throws JDOMException */ public static List fileToElementList(File file) throws JDOMException { return fileToElement(file).getChildren(); } /** * 自定义Xpath查询表达式,查询指定的文件并简单封装为List of Map,并返回. * @deprecated * @param file 需要查询的文件路径 * @param express xpath查询表达式 * @return List * @throws JDOMException */ public static List<Map<String, String>> queryToMapList(File file, String express) throws JDOMException { return elementToMap(queryToElementList(file, express)); } /** * 自定义Xpath查询表达式,查询指定的文件并简单封装为List of Map,并返回. * @deprecated * @param file 需要查询的文件路径 * @param express xpath查询表达式 * @return List * @throws JDOMException */ public static List<Map<String, String>> queryAttributeToMapList(File file, String express) throws JDOMException { return elementAttributeToMap(true,queryToElementList(file, express)); } /** * 将节点封装成为List of Map.不推荐使用.(不支持节点属性,只支持节点) * @deprecated * @param elementList * @return List */ public static List<Map<String, String>> elementToMap( List elementList) { return elementAttributeToMap(false,elementList); } private static Map toMap(boolean readAttribute,Element element){ int j=0; Map<String, String> map = new HashMap<String, String>(); //读取所有属性 List<Attribute> as=element.getAttributes(); for (j=0;readAttribute&&as!=null&&j<as.size();j++) { Attribute _as=as.get(j); map.put(_as.getName(), element.getAttributeValue(_as.getName())); } //读取所有子节点 List listElement = element.getChildren(); for (j=0;listElement!=null&&j<listElement.size();j++) { Element element2=(Element)listElement.get(j); map.put(element2.getName(), element2.getText()); } return map; } public static List<Map<String, String>> elementAttributeToMap(boolean readAttribute, List elementList) { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); for (int i=0,j=0;list!=null&&i<elementList.size();i++) { Element element=(Element)elementList.get(i); list.add(toMap(readAttribute,element)); } return list; } /** * 将Document对象保存为一个xml文件 * <pre> * Document doc=new Document(); * Element e=new Element("r"); * doc.setRootDocument(e); * XML.documentToFile(doc,new File("c://abc/a.xml"));</pre> * @param document 对象 * @param saveFile 文件保存地址 * @return boolean */ public static boolean documentToFile(Document document, File saveFile) { try { if(!saveFile.getParentFile().exists()){ FileUtils.forceMkdir(saveFile.getParentFile()); } FileOutputStream out1 = new FileOutputStream(saveFile); Format format = Format.getPrettyFormat(); format.setEncoding(Config.DEFAULT_TYPE); format.setIndent("\t"); XMLOutputter outputter = new XMLOutputter(format); outputter.output(document, out1); out1.flush(); out1.close(); return true; } catch (Exception e) { e.printStackTrace(); } return false; } /** * 将表达式查出的节点全部删除,并保存。 * <pre> * XML.remove(new File("c://abc/a.xml"),"/xml");</pre> * </pre> * @param file XML文件路径 * @param express Xpath查询表达式 * @return boolean * @throws JDOMException */ public static boolean remove(File file, String express) throws JDOMException { List eList = queryToElementList(file, express); for (int i=0;eList!=null&&i<eList.size();i++) { Element element =(Element)eList.get(i); element.removeContent(); } return documentToFile(document, file); } }
相关推荐
### JDOM操作XML文件的关键知识点 #### 一、JDOM简介 JDOM(Java Document Object Model)是一种基于Java的XML解析API,它提供了一种简便的方式来解析和操作XML文档。与传统的DOM相比,JDOM更加注重性能和易用性,...
`jdom-1.1.jar`则是JDOM-1.1的核心库文件,可以直接引入到Java项目中,以便进行XML操作。 在JDOM中,XML文档被表示为一个树形结构,主要由三个基本元素组成:`Element`代表XML元素,`Attribute`表示元素的属性,而`...
在Java中,使用JDOM进行XML操作主要涉及以下几个核心概念和步骤: 1. **构建XML文档**:首先,我们需要创建一个`DocumentBuilderFactory`实例,然后通过`newDocumentBuilder()`方法获取`DocumentBuilder`。利用`...
2. **Action处理**:在Action类中,使用JDOM读取XML文件,获取或更新数据,然后将这些数据封装到ActionForm中。 3. **业务逻辑**:在业务层,可以编写方法处理XML数据,如查询、插入、更新和删除。 4. **显示数据**...
在JSP页面中,我们可以创建JavaBean(Java组件)来封装JDOM的解析逻辑,然后在JSP页面上调用这些方法。 - **数据展示:** 解析XML后,可以使用JSP的EL(表达式语言)或JSTL(JavaServer Pages Standard Tag Library...
JDOM是Java中一个专门用来处理XML的库,它提供了一种高效、灵活且完全符合Java语言习惯的方式来读取、写入和操作XML文档。下面我们将详细探讨JDOM解析本地XML的相关知识点。 首先,JDOM的核心概念包括`Element`、`...
JDOM通过`Element`类来代表XML元素,`Attribute`类表示属性,`Document`类则封装整个XML文档。以下是一个创建XML文档的例子: ```java import org.jdom2.Document; import org.jdom2.Element; public class ...
JDOM以一种简洁的接口封装了XML文档的节点,每个节点都对应XML文档中的一个元素,这大大简化了对XML文档的操作过程。 4. 使用JDOM处理XML文档的过程:主要包括将计算机信息的树型结构保存至XML文档和读取XML文档...
3. **Text(文本)**:XML元素内部可以包含文本内容,JDOM中的`Text`类用来封装这些文本。 4. **Document(文档)**:整个XML文档由根元素和一些可选的声明组成。在JDOM中,`Document`类表示整个XML文档。 **JDOM...
标题提到的"xml转对象封装的简单与复杂xml的转化写法"主要涉及以下知识点: 1. **JDOM库**:JDOM是Java Document Object Model的缩写,它提供了一种在内存中表示XML文档的方式,通过创建SAXBuilder或DOMBuilder实例...
dom4j,jsoup,jdom,w3cdom,xstream使用代码工程 package ivyy.taobao.com.dom4j; import ivyy.taobao.com.entity.Address; import ivyy.taobao.com.entity.Location; import ivyy.taobao.com.entity.Point; import ...
封装XML读取的Java类一般包括以下几个主要部分: 1. **类定义**:创建一个类,例如命名为`XmlDataReader`,并定义必要的属性和方法。属性可能包括XML文件路径,而方法可能包含`readXml()`、`parseElement()`等,...
JDOM 1.1对命名空间的支持得到了加强,开发者可以通过API轻松处理XML命名空间,包括声明、引用和操作。 5. **错误处理与验证** JDOM 1.1提供了良好的错误处理机制,当XML文档结构不正确或不符合DTD(Document Type...
JDOM是Java平台上的一个解析、创建和操作XML文档的库,它为开发者提供了高效且易于使用的API来处理XML文档。本文将深入探讨JDOM 1.1.3版本,解析其核心功能和应用场景。 JDOM 1.1.3是一个Java实现的DOM(Document ...
通过理解JDOM的核心概念和操作方式,我们可以轻松地在Java应用中集成XML功能,无论是构建XML文档,还是解析和修改已有的XML资源。而提供的"jdom.jar"文件就是JDOM库的实现,将其引入项目,即可享用JDOM提供的全部...
1. TestTTT.java:通常,以"Test"开头的Java文件是用来进行单元测试的,因此这个文件可能包含了对某个功能或方法的测试代码,特别是针对XML操作的测试。它可能使用了JUnit等测试框架,通过具体的测试用例验证JDOM...
`Element`类代表XML文档中的元素,`Attribute`类表示元素的属性,而`Document`类则封装了整个XML文档的结构。通过这些类,开发者可以方便地构建XML树形结构,进行添加、删除和修改操作。 在下载JDOM包时,通常会...
`XmlObject.java` 可能是用于表示Java对象的类,而`XmlParser.java` 是解析和封装XML的工具类。 在`XmlParser.java` 中,主要涉及到以下核心技术: 1. **DOM解析器(Document Object Model)**:这是最常见的XML...
在JDOM中,`Element`类代表XML的元素,`Attribute`类表示元素的属性,`Document`类则封装了整个XML文档。通过这些类,我们可以创建复杂的XML结构,并进行读写操作。例如,我们可以使用`DocumentBuilderFactory`和`...
**JDOM概述** JDOM(Java Document Object Model)是一个用纯Java实现的...通过阅读《jdom中文使用.doc》、《jdom操作XML.doc》等文档,开发者可以深入理解JDOM的使用细节和最佳实践,从而更好地利用JDOM进行XML处理。