- 浏览: 595435 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
DOM4J是dom4j.org出品的一个开源XML解析包。Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
DOM4J下载jar包:http://downloads.sourceforge.net/dom4j/dom4j-1.6.1.jar
JAXEN(对XPath的支持):http://dist.codehaus.org/jaxen/distributions/jaxen-1.1.1.zip
DOM4J主要接口都在org.dom4j这个包里定义。
结构如下:
-Node为所有的dom4j中XML节点定义了多态行为;
-Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为;
|-Element 定义XML 元素;
|-Document定义了XML文档;
-DocumentType 定义XML DOCTYPE声明;
-Entity定义 XML entity;
-Attribute定义了XML的属性;
-ProcessingInstruction 定义 XML 处理指令;
-CharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text;
|- CDATA 定义了XML CDATA 区域;
|- Text 定义XML 文本节点;
|- Comment 定义了XML注释的行为;
参考:http://zhangjunhd.blog.51cto.com/113473/126310/
DOM4J下载jar包:http://downloads.sourceforge.net/dom4j/dom4j-1.6.1.jar
JAXEN(对XPath的支持):http://dist.codehaus.org/jaxen/distributions/jaxen-1.1.1.zip
DOM4J主要接口都在org.dom4j这个包里定义。
结构如下:
-Node为所有的dom4j中XML节点定义了多态行为;
-Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为;
|-Element 定义XML 元素;
|-Document定义了XML文档;
-DocumentType 定义XML DOCTYPE声明;
-Entity定义 XML entity;
-Attribute定义了XML的属性;
-ProcessingInstruction 定义 XML 处理指令;
-CharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text;
|- CDATA 定义了XML CDATA 区域;
|- Text 定义XML 文本节点;
|- Comment 定义了XML注释的行为;
<?xml version="1.0" encoding="UTF-8"?> <book id='history' value="cn.txt.History"> <address id='22'>100010</address> <title id='33'>java tools</title> <file id='44'>c:\file\</file> </book>
package test.Dom4j; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Iterator; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; import org.dom4j.io.SAXValidator; import org.dom4j.io.XMLWriter; import org.dom4j.io.OutputFormat; import org.dom4j.Element; import org.dom4j.Attribute; import org.dom4j.util.XMLErrorHandler; /** * @projectName:Test * @packageName: test.Dom4j * @ClassName : Dom4jTest * @createBy :Text * @createDate :2014-5-30 下午04:13:04 * @version : * */ public class Dom4jTest { // 读取文件转换成Document对象 public Document parseFile2Document(String filename) throws DocumentException { //SAXReader用于读取文件 SAXReader reader = new SAXReader(); Document document = reader.read(filename); return document; } @SuppressWarnings("all") public void parseContent(Document document){ Element root = document.getRootElement(); // 打印root结点的名称 System.out.println("Root Element:" + root.getName()); // 打印root结点中属性的名字 for (Iterator i = root.attributeIterator(); i.hasNext();) { Attribute attribute = (Attribute) i.next(); System.out .println(attribute.getName() + ":" + attribute.getValue()); } // 打印根元素的所有子元素的名称和值 for (Iterator i = root.elementIterator(); i.hasNext();) { Element element = (Element) i.next(); System.out.println(element.getName() + ":" + element.getText()); if (element.getName().equals("address")) { element.setText("西安市长安区"); // 修改元素的Text } //枚举属性 for (Iterator ia = element.attributeIterator(); ia.hasNext();) { Attribute attribute = (Attribute) ia.next(); System.out.println(attribute.getName() + ":" + attribute.getData()); } } // 修改后进行打印 for (Iterator i = root.elementIterator(); i.hasNext();) { Element element = (Element) i.next(); System.out.println(element.getName() + ":" + element.getText()); } // 把修改后的文件保存下来 OutputFormat format = null; XMLWriter xmlwriter = null; // 进行格式化 format = OutputFormat.createPrettyPrint(); // 设定编码 format.setEncoding("UTF-8"); try { xmlwriter = new XMLWriter(new FileOutputStream("test.xml"), format); xmlwriter.write(document); xmlwriter.flush(); xmlwriter.close(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // 通过xsd校验xml public void validateXMLByXSD() { String xmlName = "src\\用户基本信息.xml"; String xsdName = "src\\用户基本信息.xsd"; try { // 创建默认的xml错误处理器 XMLErrorHandler errorHandler = new XMLErrorHandler(); // 获取基于SAX的解析器的实例 SAXParserFactory factory = SAXParserFactory.newInstance(); // 解析器在解析时验证xml内容 factory.setValidating(true); // 使用当前配置的工厂参数创建SAXParser的一个新实例 SAXParser parser = factory.newSAXParser(); // 创建一个读取工具 SAXReader xmlReader = new SAXReader(); // 获取要校验xml文档实例 Document xmlDocument = xmlReader.read(new File(xmlName)); // 设置 XMLReader 的基础实现中的特定属性 parser.setProperty( "http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema"); parser.setProperty( "http://java.sun.com/xml/jaxp/properties/schemaSource", "file:" + xsdName); // 创建一个SAXValidator校验工具,并设置校验器的属性 SAXValidator validator = new SAXValidator(parser.getXMLReader()); // 设置校验工具的错误处理器,当发生错误时,可以从处理器对象中得到错误信息 validator.setErrorHandler(errorHandler); // 校验 validator.validate(xmlDocument); XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint()); // 如果错误信息不为空,说明校验失败,打印错误信息 if (errorHandler.getErrors().hasContent()) { System.out.println("XML文件通过XSD文件校验失败!"); writer.write(errorHandler.getErrors()); } else { System.out.println("XML文件通过XSD文件校验成功!"); } } catch (Exception e) { System.out.println("xml文件" + xmlName + "通过xsd文件:" + xsdName + "校验失败!原因是:" + e.getMessage()); e.printStackTrace(); } } public static void main(String[] args) throws DocumentException, IOException { Dom4jTest read = new Dom4jTest(); Document document = read.parseFile2Document("book.xml"); read.parseContent(document); } }
import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; /** * @author:LWX * @TODO:XML操作工具类 */ public class XmlUtil { /** * @author:LWX * @TODO:字符串转换成XML对象 */ public static Document getXMLFromString(String xmlStr) throws Exception { Document document = DocumentHelper.parseText(xmlStr); return document; } /** * @author:LWX * @TODO:XML对象转换成字符串 */ public static String getStringFromXML(Document document) { return document.asXML(); } /** * @author:LWX * @TODO:读取文件转换成Document对象 */ public static Document getDocumentFromFile(String filename) throws DocumentException { SAXReader reader = new SAXReader(); Document document = reader.read(filename); return document; } /** * @author:LWX * @TODO:获取根节点 */ public static Element getRootElement(Document document) { return document == null ? null : document.getRootElement(); } /** * @author:LWX * @TODO:根据节点名获得子节点对象 */ public static Element getChildElementByName(Element parentElement, String elementName) { return parentElement == null ? null : parentElement .element(elementName); } /** * @author:LWX * @TODO:获得节点的值 */ public static String getElementText(Element element) { return element == null ? null : element.getText(); } /** * @author:LWX * @TODO:获得某个节点的属性值 */ public static String getAttributeValue(Element element, String attributeName) { return element == null ? null : element.attribute(attributeName) .getValue(); } /** * @author:LWX * @TODO:添加一个节点 */ public static Element addElement(Element parentElement, String elementName, Map<String, String> attributeMap) { if (parentElement == null) { return null; } Element newElement = parentElement.addElement(elementName); for (String key : attributeMap.keySet()) { newElement.addAttribute(key, attributeMap.get(key)); } return parentElement; } /** * @author:LWX * @TODO:删除对应节点 */ @SuppressWarnings("all") public static void removeElement(Element parentElement, String attributeName, String attributeValue) { Element resultElement = null; if (parentElement != null) { for (Iterator i = parentElement.elementIterator(); i.hasNext();) { Element element = (Element) i.next(); if (attributeValue != null && attributeValue.equals(element .attributeValue(attributeName))) { resultElement = element; break; } } parentElement.remove(resultElement); } } /** * @author:LWX * @TODO:更新属性信息 */ @SuppressWarnings("all") public static void updateElement(Element element, String attributeName, String attributeValue) { if (element != null) { element.attribute(attributeName).setValue(attributeValue); } } /** * @author:LWX * @TODO:通过属性值定位Node获得节点对象 节点和参数格式 /report/columns, * column[@colCode='DEPTNAME'] */ @SuppressWarnings("all") public static Element getElementByNode(Document document, String nodeName, String attributeName) { Element element = null; Node root = document.selectSingleNode(nodeName); List list = root.selectNodes(attributeName); for (Object obj : list) { element = (Element) obj; break; } return element; } /** * @author:LWX * @TODO:根据属性名的值进行升序或降序 nodeName格式 /report/columns attributeName格式@order * */ @SuppressWarnings("all") public static List<Element> getElementsByOrder(Document document, String nodeName, String attributeName, boolean isIncr) { List<Element> nodes = document.selectNodes(nodeName, attributeName); if (!isIncr) { Collections.reverse(nodes); } return nodes; } /** * @author:LWX * @TODO:通过节点名获得节点对象 */ @SuppressWarnings("all") public static Element getElementByNodeName(Document document, String nodeName) { List<Element> nodes = document.selectNodes(nodeName); return nodes == null && nodes.size() <= 0 ? null : nodes.get(0); } public static void main(String[] args) throws Exception, IOException { Document document = XmlUtil.getDocumentFromFile("test.xml"); Element rootElement = XmlUtil.getRootElement(document); System.out.println(XmlUtil.getElementText(XmlUtil .getChildElementByName(rootElement, "querySql"))); Element colElement = XmlUtil.getChildElementByName(rootElement, "columns"); System.out.println(XmlUtil.getElementByNode(document, "/report/columns", "column[@colCode='DEPTNAME']") .attributeValue("colName")); XmlUtil.removeElement(colElement, "colCode", "DEPTNAME"); Map<String, String> map = new HashMap<String, String>(); map.put("colCode", "COUNT"); map.put("colName", "总数"); map.put("colType", "int"); map.put("isVisible", "true"); map.put("order", "4"); XmlUtil.addElement(colElement, "column", map); XmlUtil.updateElement(XmlUtil.getElementByNode(document, "/report/columns", "column[@colCode='DEPTID']"), "isVisible", "false"); List<Element> nodes = XmlUtil.getElementsByOrder(document, "/report/columns/column", "@order", false); for (Element e : nodes) { System.out.println("colCode : " + e.attributeValue("colCode")); System.out.println("colName : " + e.attributeValue("colName")); } System.out.println(XmlUtil.getElementByNodeName(document, "/report/querySql").getName()); System.out.println(XmlUtil.getStringFromXML(document)); String initStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; initStr += "<report measureCode=\"mms_user_dept\" measureName=\"部门用户统计\"></report>"; document = XmlUtil.getXMLFromString(initStr); XmlUtil.addElement(XmlUtil.getRootElement(document), "columns", map); System.out.println(XmlUtil.getStringFromXML(document)); } }
参考:http://zhangjunhd.blog.51cto.com/113473/126310/
发表评论
文章已被作者锁定,不允许评论。
相关推荐
1. **灵活的文档构建**:DOM4J提供了多种方式来创建和修改XML文档,如通过元素、属性、文本节点等对象直接操作,或者使用XPath表达式定位。 2. **强大的查询能力**:DOM4J支持XPath,可以方便地通过路径表达式查找...
通过深入学习DOM4J,开发者可以更高效地处理XML文档,提升项目开发效率。DOM4J 2.0.0-ALPHA-2版本虽是开发版,但仍能为开发带来便利,对于理解DOM4J的内部机制和新特性,开发者应持续关注其更新和发展。
《深入解析DOM4J——基于Java的XML处理框架》 ...通过阅读DOM4J的API文档(如`dom4j-2.0.3-javadoc.jar`),结合源码学习(`dom4j-2.0.3-sources.jar`),可以深入理解其实现原理并更好地利用它来解决实际问题。
通过这些资源,你可以系统性地学习DOM4J,从基础的XML文档创建,到复杂的XPath查询,再到XML的修改和操作。实践使用DOM4J时,结合API文档和示例代码,将大大提升你的XML处理能力。同时,了解Jaxen可以帮助你更灵活地...
1. **DOM4J概述**:DOM4J是一个开源项目,它提供了全面的XML处理功能,包括解析、生成、修改和查询XML文档。它不仅支持W3C的DOM API,还提供了基于事件的SAX和直接的DOM接口。 2. **核心概念**:主要包括Document...
1. **读取XML**: dom4j提供了`DocumentReader`和`SAXReader`类,分别基于DOM和SAX解析XML文件。 2. **写入XML**: `DocumentWriter`和`XMLWriter`类用于将构建的XML对象序列化为XML字符串或文件。 3. **修改XML**: ...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于“Document Object Model for Java”,但它并不仅仅是一个DOM实现,它还包含...
- DOM4J API.CHM文件很可能是DOM4J的官方帮助文档,包含了详细的API参考、示例代码和使用指南,对于学习和使用DOM4J非常有帮助。 5. **使用CHM文件** - 双击CHM文件,通常会用默认的浏览器打开,用户可以通过目录...
1. **DOM4J简介** - DOM4J是一个开源项目,完全遵循Apache Software License 2.0协议。 - 它提供了丰富的API,使得开发者能够方便地读写XML文档,创建、修改和查询XML结构。 - DOM4J支持SAX和DOM解析,同时引入了...
1. **dom4j-2.0.0-ALPHA-2.jar**:这是DOM4J的核心库文件,包含了DOM4J的所有核心类和接口。开发者可以引入这个jar包到他们的项目中,以便使用DOM4J提供的各种XML处理功能。这些功能包括解析XML文档,构建XML树结构...
开发人员可以查看和学习DOM4J的源代码,以便更好地理解其工作原理,进行调试或自定义扩展。 3. **dom4j-2.0.0-ALPHA-2.jar**:这是DOM4J库的主要二进制文件,包含了编译后的类,可以直接在Java项目中引用以实现XML...
- `dom4j-2.1.0-javadoc.jar`:这个文件包含DOM4J库的API文档,对于开发者来说,它是理解和学习DOM4J的重要参考资料。 - `dom4j-2.1.0-sources.jar`:这个文件包含了DOM4J源代码,开发者可以通过查看源码来深入...
提供的源码文件让开发者能够深入理解DOM4J的工作原理,对于学习和调试非常有帮助。Javadoc文件则包含了DOM4J所有类和方法的详细说明,是编写基于DOM4J代码时的重要参考。 ### 应用场景 DOM4J广泛应用于Java项目中...
1. **dom4j-1.6.1.jar**:这是DOM4J的核心库文件,包含了所有DOM4J的类和接口,用于在项目中引用和使用DOM4J。 2. **源代码**:提供DOM4J的源码,方便开发者研究其内部实现,学习和优化自己的代码。 3. **文档**:...
**DOM4J 1.6.1:XML文档操作库** DOM4J 是一个非常流行的、功能强大且灵活的Java库,专为处理XML文档而设计。它在XML社区中享有盛誉,因其简单易用...通过学习和掌握DOM4J,开发者可以更有效地处理XML,提升工作效率。
**DOM4J-1.6.1 包详解** DOM4J 是一个强大的 Java XML API,它提供了全面的 XML 解析、操作以及文档构建功能。这个包“dom4j-1.6.1”是 DOM4J 的一个特定版本,包含了该库的所有组件和资源,适用于 Android 平台的 ...
1. **DOM4J的核心特性** - **XML解析**:DOM4J支持SAX和DOM两种解析方式。SAX解析器适用于处理大型XML文件,因为它不需要将整个文档加载到内存中;DOM解析器则提供了一个完整的树形结构,方便遍历和操作。 - **...
1. **元素(Element)和属性(Attribute)**:DOM4J将XML文档中的元素和属性封装为对象,可以通过这些对象进行操作,如添加、删除和修改元素和属性。 2. **路径(Path)选择器**:DOM4J支持XPath表达式,允许开发者...
1. **XML解析**:DOM4J支持多种解析策略,包括DOM、SAX和STAX,可以按需选择适合的解析器来处理XML文档。 2. **XPath支持**:DOM4J提供了对XPath表达式的支持,允许开发者通过简单的语句选取XML文档的特定部分。 3...