DOM4J:开源,支持XML,XPath,XSLT。与JDOM一样应用与JAVA平台。它的API完全支持DOM,SAX,JAXP。http://www.dom4j.org
Dom4j是早期由开发JDOM的人分离出来独立开发的。与JDOM不同的是:Dom4j使用接口和抽象基类,虽然dom4j的API相对复杂一些,但比JDOM更灵活性。SUN的JAXM跟HIBERNATE都是使用DOM4J
Dom4j也使用SAX解析器来分析XML文档,创建DOM4J树。此外,dom4j也接收DOM格式的内容,并提供从dom4j树到SAX事件流或W3C DOM树中的输出机制。
与JDOM不同的是:DOM4J自带了一个SAX解析器Aelfred2,如果没有显示设置,那么默认会加载JAXP配置的解析器,如果创建解析器失败,那么最后将使用dom4j自带的Aelfred2解析器。
DOM4J实例一:DOM4j的API使用
Dom4jTest.java
-
import
java.io.IOException;
-
import
org.dom4j.Document;
-
import
org.dom4j.DocumentHelper;
-
import
org.dom4j.Element;
-
import
org.dom4j.io.OutputFormat;
-
import
org.dom4j.io.XMLWriter;
-
-
public
class
Dom4jTest {
-
-
-
public
static
void
main(String[] args) {
-
-
Document doc = DocumentHelper.createDocument();
-
-
doc.addProcessingInstruction("xml-stylesheet"
,
"type='text/xsl' href='students.xsl'"
);
-
-
Element root = DocumentHelper.createElement("students"
);
-
doc.setRootElement(root);
-
-
Element eltStu = root.addElement("student"
);
-
Element eltName = eltStu.addElement("name"
);
-
Element eltAge = eltStu.addElement("age"
);
-
-
eltName.setText("张三"
);
-
eltAge.setText("23"
);
-
-
-
OutputFormat outFmt = new
OutputFormat(
" "
,
true
);
-
outFmt.setEncoding("gb2312"
);
-
try
{
-
-
-
XMLWriter xmlWriter = new
XMLWriter(outFmt);
-
xmlWriter.write(doc);
-
} catch
(IOException e) {
-
e.printStackTrace();
-
}
-
}
-
-
}
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Dom4jTest {
public static void main(String[] args) {
//1.创建DOC对象
Document doc = DocumentHelper.createDocument();
//2.创建处理指令
doc.addProcessingInstruction("xml-stylesheet", "type='text/xsl' href='students.xsl'");
//3.创建根元素
Element root = DocumentHelper.createElement("students");
doc.setRootElement(root);
//4.创建子元素
Element eltStu = root.addElement("student");
Element eltName = eltStu.addElement("name");
Element eltAge = eltStu.addElement("age");
//5.设置文本节点值
eltName.setText("张三");
eltAge.setText("23");
//6.输出
//PrintWriter pw = new PrintWriter(System.out);
OutputFormat outFmt = new OutputFormat(" ",true);
outFmt.setEncoding("gb2312");
try {
//doc.write(pw);
//pw.close();
XMLWriter xmlWriter = new XMLWriter(outFmt);
xmlWriter.write(doc);
} catch (IOException e) {
e.printStackTrace();
}
}
}
DOM4J实例二:遍历整个XML文档树
VisitorTest.java
-
import
java.io.File;
-
import
org.dom4j.*;
-
import
org.dom4j.io.SAXReader;
-
-
public
class
VisitorTest{
-
-
public
static
void
main(String[] args){
-
SAXReader saxReader=new
SAXReader();
-
try
{
-
Document doc=saxReader.read(new
File(
"students.xml"
));
-
doc.accept(new
MyVisitor());
-
}catch
(DocumentException e){
-
e.printStackTrace();
-
}
-
}
-
-
private
static
class
MyVisitor
extends
VisitorSupport{
-
public
void
visit(Attribute node){
-
System.out.println("Attribute: "
+node.getName()+
"="
+node.getValue());
-
}
-
-
public
void
visit(Element node){
-
if
(node.isTextOnly()){
-
System.out.println("Element: "
+node.getName()+
" "
+node.getText());
-
}else
{
-
System.out.println("------------"
+node.getName()+
"-------------"
);
-
}
-
}
-
-
public
void
visit(ProcessingInstruction node){
-
System.out.println("PI: "
+node.getTarget()+
" "
+node.getText());
-
}
-
-
}
-
}
import java.io.File;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
public class VisitorTest{
public static void main(String[] args){
SAXReader saxReader=new SAXReader();
try{
Document doc=saxReader.read(new File("students.xml"));
doc.accept(new MyVisitor());
}catch (DocumentException e){
e.printStackTrace();
}
}
private static class MyVisitor extends VisitorSupport{
public void visit(Attribute node){
System.out.println("Attribute: "+node.getName()+"="+node.getValue());
}
public void visit(Element node){
if(node.isTextOnly()){
System.out.println("Element: "+node.getName()+" "+node.getText());
}else{
System.out.println("------------"+node.getName()+"-------------");
}
}
public void visit(ProcessingInstruction node){
System.out.println("PI: "+node.getTarget()+" "+node.getText());
}
}
}
DOM4J实例三:基于事件的处理(对内容多的XML进行处理)
ElementHandlerTest.java
-
import
java.io.File;
-
import
org.dom4j.*;
-
import
org.dom4j.io.SAXReader;
-
-
public
class
ElementHandlerTest{
-
-
-
public
static
void
main(String[] args){
-
SAXReader saxReader=new
SAXReader();
-
saxReader.addHandler("/students/student"
,
new
StudentHandler());
-
try
{
-
saxReader.read(new
File(
"students.xml"
));
-
}catch
(DocumentException e){
-
e.printStackTrace();
-
}
-
}
-
-
private
static
class
StudentHandler
implements
ElementHandler{
-
public
void
onStart(ElementPath path){
-
Element elt=path.getCurrent();
-
System.out.println("Found student: "
+elt.attributeValue(
"sn"
));
-
path.addHandler("name"
,
new
NameHandler());
-
}
-
-
public
void
onEnd(ElementPath path){
-
path.removeHandler("name"
);
-
}
-
}
-
-
private
static
class
NameHandler
implements
ElementHandler{
-
public
void
onStart(ElementPath path){
-
System.out.println(path.getPath());
-
}
-
-
public
void
onEnd(ElementPath path){
-
Element elt=path.getCurrent();
-
System.out.println(elt.getName()+": "
+elt.getText());
-
}
-
}
-
}
import java.io.File;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
public class ElementHandlerTest{
public static void main(String[] args){
SAXReader saxReader=new SAXReader();
saxReader.addHandler("/students/student",new StudentHandler());
try{
saxReader.read(new File("students.xml"));
}catch (DocumentException e){
e.printStackTrace();
}
}
private static class StudentHandler implements ElementHandler{
public void onStart(ElementPath path){
Element elt=path.getCurrent();
System.out.println("Found student: "+elt.attributeValue("sn"));
path.addHandler("name",new NameHandler());
}
public void onEnd(ElementPath path){
path.removeHandler("name");
}
}
private static class NameHandler implements ElementHandler{
public void onStart(ElementPath path){
System.out.println(path.getPath());
}
public void onEnd(ElementPath path){
Element elt=path.getCurrent();
System.out.println(elt.getName()+": "+elt.getText());
}
}
}
分享到:
相关推荐
2. jQuery插件:`z-pager.js`是基于jQuery库的插件,利用jQuery强大的DOM操作能力和事件处理能力,简化了分页功能的实现。 二、插件引入 要使用`z-pager.js`分页插件,首先需要在HTML文档中引入以下两个文件: 1....
根据提供的标题、描述、标签及部分内容,我们可以总结出本文主要关注的是JavaScript中实现的一个经典实例——霓虹灯特效。为了更好地理解这一知识点,我们将从以下几个方面进行深入探讨: ### 一、JavaScript简介 ...
4. **解析XML实例**: 假设我们有一个XML字符串`xmlString`,我们可以通过以下步骤解析它: - 导入库:`const DOMParser = require('./dom-parser.js');` - 创建DOMParser对象并解析XML:`const parser = new DOM...
XSS(Cross Site Scripting)挑战,正如“xsschallenge.7z”这个压缩包所暗示的,是一种网络安全训练,旨在帮助用户理解并应对跨站脚本攻击。XSS攻击是Web应用中常见的一种安全威胁,它允许攻击者在用户的浏览器上...
"Xss_test"这个文件可能包含了模拟这些攻击场景的实例,以及相应的防御代码示例,通过实践操作,我们可以更好地理解XSS攻击的原理和防护手段,提升我们的安全意识和技术能力。 总之,XSS攻击是Web开发中的一个重要...
- **指定顺序**:不必按照字母顺序指定,但`I`、`J`、`K`需按照字母顺序指定。 - **示例**:`G65 P1000 A10 B20 C30 I40 J50 K60`。 #### 八、算术逻辑运算 - **基本运算**:加减乘除。 - **三角函数**:正弦、...
对于城市查询列表的显示区域div#suggest和div#suggest2,我们设置了宽度、隐藏显示,并添加了绝对定位以及较高的z-index值,确保下拉提示能够覆盖在页面其他内容之上。此外,我们还定义了鼠标悬停(hover)状态下的...
4. 初始化ECharts实例:在创建的DOM元素中初始化ECharts实例,并配置图表的样式和数据。 ```javascript var myChart = echarts.init(document.querySelector('.chart-container')); var option = { // 配置图表的...
通过这个实例,我们可以了解到如何通过DOM操作和事件监听来动态改变网页元素的样式和显示状态,从而实现交互式的网页功能。这种技术广泛应用于各种网页应用,如产品展示、文章分类、设置面板等,提高了用户体验。
var selectChar = new Array(0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','W','x','y','z'); // 验证码候选字符集 for(var i = 0; i ; i+...
- **i∼j**:图中i到j的唯一相邻边集。 - **Im**:m×m单位矩阵。 #### 三、贝叶斯推理在机器学习中的应用 本书强调了贝叶斯推理在处理大量数据时的优势。随着数据规模的不断增长,如何有效地从数据中提取有价值的...
- **域(Dom)**:指随机变量可以取的所有可能值的集合,例如 \(dom(x)\) 表示变量 \(x\) 的所有可能取值。 - **状态**:表示随机变量所处的一种特定情况,如 \(x = x\) 表示变量 \(x\) 处于状态 \(x\)。 - **概率**...
DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回Document,Element,Node.DWR会自动将这些转换成浏览器DOM对象.通常在启动JDOM Converter时会有一个提示信息,除非你想采用JDOMconverter否则可以...
本文将深入探讨一系列重要的 JavaScript 验证函数及其调用方式,并结合实例来帮助理解这些验证函数的工作原理。 #### 调用方法及注意事项 1. **表单验证** - 使用 `onsubmit` 事件来调用验证函数:在 `<form>` ...
* Pinyin4j:操作汉字的拼音 十三、事务: * 事务是一个逻辑单元执行的一系列操作,要么全部执行,要么全部不执行 * 事务特点: + 原子性(Atomicity):事务中各元素不可分割,全部执行成功或者撤销所有的操作 + ...
#### 四、A上重要关系的实例 - **空关系**\(\emptyset\)是\(A\)上的关系。 - **全域关系**\(E_A=\{\langle x,y \rangle|x \in A \land y \in A\}=A \times A\)。 - **恒等关系**\(I_A=\{\langle x,x \rangle|x \in ...
6. **日志记录**:为了追踪和调试,项目可能会使用Log4j或java.util.logging等日志框架,记录请求和处理过程中的重要信息。 7. **单元测试**:对于一个成熟的项目,单元测试是必要的,JUnit或TestNG可以用来编写和...