- 浏览: 30008 次
- 性别:
- 来自: 北京
最新评论
本文档包含四个部分:
<!-- [if !supportLists]-->Ø <!-- [endif]-->写 XML 示例
<!-- [if !supportLists]-->Ø <!-- [endif]-->修改 XML
<!-- [if !supportLists]-->Ø <!-- [endif]-->读 XML 示例
<!-- [if !supportLists]-->Ø <!-- [endif]-->任务描述:使用递归 , 完成对任何 xml 文件的读取
写文件示例:
/** 任务描述:使用JAVA 程序输出下面的xml 文档:class.xml
<?xml version="1.0" encoding="GBK"?>
<root year="2008"> <boss> 带头大哥 </boss> <class id="01" teacher=" 张三"> 一班 </class> <class id="02" teacher=" 李四"> 二班 </class> <class id="03" teacher=" 张三丰"> 三班 </class> </root> */ package chapter12.dom4j;
import java.io.FileWriter; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter;
public class WriteDemo {
public static void main(String[] args) throws Exception { // 创建文档对象 Document doc = DocumentHelper.createDocument ();
// 创建根节点 <lovo></lovo> Element root = doc.addElement( "root" );
// 增加属性节点 <root year="2008"></root> root.addAttribute( "year" , "2008" ); root.addElement( "boss" ).addText( " 带头大哥" );
// 增加带属性和文本的子节点 <class id="01" teacher=" 张三"> 一班</class> root.addElement( "class" ).addAttribute( "id" , "01" ).addAttribute( "teacher" , " 张三" ).addText( " 一班" ); root.addElement( "class" ).addAttribute( "id" , "02" ).addAttribute( "teacher" , " 李四" ).addText( " 二班" ); root.addElement( "class" ).addAttribute( "id" , "03" ).addAttribute( "teacher" , " 张三丰" ).addText( " 三班" );
// 保存( 指定编码) FileWriter out1 = new FileWriter( "class.xml" );
OutputFormat format = OutputFormat.createPrettyPrint (); //createCompactFormat,createPrettyPrint format.setEncoding( "GBK" );
XMLWriter out2 = new XMLWriter(out1,format); // 指定格式
out2.write(doc); out2.close(); }
} |
修改文件示例:
/** * 任务描述:将下面class.xml 中id=02 的节点中的文本改为“项目二部”,teacher 改为“带头大哥” <?xml version="1.0" encoding="GBK"?> <root year="2008"> <boss> 带头大哥 </boss> <class id="01" teacher=" 张三"> 一班 </class> <class id="02" teacher=" 李四"> 二班 </class> <class id="03" teacher=" 张三丰"> 三班 </class> </root> */ package chapter12.dom4j;
import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.util.List;
import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter;
public class ModifyDemo {
public static void main(String[] args) throws Exception { StringBuffer sb = new StringBuffer();
SAXReader reader = new SAXReader();
// 得到文档对象 Document doc = null ; try { // 指定编码, 避免出现 InputStream isr = new FileInputStream ( new File ( "class.xml" )); doc = reader.read( new InputStreamReader(isr, "GBK" )); isr.close(); } catch (DocumentException e) { e.printStackTrace(); }
// 使用XPATH 表达式获得节点列表 List<Element> list = doc.selectNodes( "//root/class" ); // 创建一个迭代器. for (Element ele:list){ String id = ele.valueOf( "@id" );
if (id!= null && id.equals( "02" )){ ele.setText( " 项目二部" ); ele.setAttributeValue( "teacher" , " 带头大哥" ); } }
// 保存( 指定编码) FileWriter out1 = new FileWriter( "class.xml" );
OutputFormat format = OutputFormat.createPrettyPrint (); format.setEncoding( "GBK" );
XMLWriter out2 = new XMLWriter(out1,format); // 指定格式
out2.write(doc); out2.close(); } } |
读文件示例:
/** * 读取class.xml, 内容如下: <?xml version="1.0" encoding="GBK"?> <root year="2008"> <boss> 带头大哥 </boss> <class id="01" teacher=" 张三"> 一班 </class> <class id="02" teacher=" 李四"> 二班 </class> <class id="03" teacher=" 张三丰"> 三班 </class> </root>
** 要求输出以下内容: 根节点:root class= 一班 id = 01 teacher = 张三 year=2008 class= 二班 id = 02 teacher = 李四 year=2008 class= 三班 id = 03 teacher = 张三丰 year=2008
teacher= 张三 teacher= 李四 teacher= 张三丰 */
package chapter12.dom4j;
import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.util.List;
import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader;
public class ReadDemo {
public static void main(String[] args) throws Exception { StringBuffer sb = new StringBuffer();
SAXReader reader = new SAXReader();
// 得到文档对象 Document doc = null ; try { // 指定编码, 避免出现 InputStream isr = new FileInputStream ( new File ( "class.xml" )); doc = reader.read( new InputStreamReader(isr, "GBK" )); isr.close(); } catch (DocumentException e) { e.printStackTrace(); }
// 获取根节点 Element eleRoot = doc.getRootElement(); System. out .println( " 根节点:" +eleRoot.getName());
// 获取指定路径中的( 多个) 节点 List<Element> listClass = doc.selectNodes( "//root/class" ); for ( int i = 0; i < listClass.size(); i++) { // 获取当前节点 Element ele = listClass.get(i);
// 获取当前节点的 名称和文本 sb.append(ele.getName() + "=" + ele.getText());
// 获取属性值 sb.append( " id = " +ele.valueOf( "@id" )); sb.append( " teacher = " +ele.valueOf( "@teacher" ));
// 获取父节点 ( 文本、属性……) sb.append( " year" + "=" + ele.getParent().valueOf( "@year" )+ " \r" ); }
System. out .println(sb.toString());
// 演示:获取指定路径中的( 多个) 属性 List<Attribute> list = doc.selectNodes( "//root/class/@teacher" ); // for(int i=0;i<list.size();i++){ // Attribute att = list.get(i); // System.out.println(att.getName()+"="+att.getValue()); // }
// 使用JDK1.5 中的for each 循环完成上面代码的功能( 对比学习)
for (Attribute att:list){ System. out .println(att.getName()+ "=" +att.getValue()); }
}
} |
递归读示例:
/**
* 任务描述:使用递归,完成对任何xml文件的读取
*/
package xml.dom4j;
import java.io.File;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class ReadDiGui {
public static void main(String[] args) {
ReadDiGui dr = new ReadDiGui();
dr.prinatAllNode();
}
public void prinatAllNode() {
SAXReader reader = new SAXReader();
// 得到文档对象
Document doc = null;
try {
doc = reader.read(new File("class.xml"));
} catch (DocumentException e) {
e.printStackTrace();
}
// 得到根节点
Element root = doc.getRootElement();
// 循环所有节点
printAllChildNode(root);
}
/**
* 打印所有子节点
*/
public void printAllChildNode(Element element) {
// 循环当前节点的所有属性
Iterator j = element.attributeIterator();
while (j.hasNext()) {
Attribute attribute = (Attribute) j.next();
System.out.println(" "
+attribute.getName()
+ " = "
+ attribute.getText());
}
for (int i = 0, size = element.nodeCount(); i < size; i++) {
Node node = element.node(i);
if (node instanceof Element) {
System.out.println(
node.getName()
+ " = "
+ node.getText());
printAllChildNode((Element) node);//自己调用自己--递归
}
}
}
}
===========================
< | < | 小于号 |
> | > | 大于号 |
& | & | 和 |
' | ' | 单引号 |
" | " | 双引号 |
实体必须以符号"&"开头,以符号";"结尾。
注意: 只有"<" 字符和"&"字符对于XML来说是严格禁止使用的。剩下的都是合法的,为了减少出错,使用实体是一个好习惯。
CDATA部件
在CDATA内部的所有内容都会被解析器忽略。
CDATA注意事项:
CDATA部件之间不能再包含CDATA部件(不能嵌套)。如果 CDATA部件包含了字符"]]>" 或者"<![CDATA[" ,将很有可能出错哦。
< person >
< name > 张三</ name >
< addr > <![CDATA[经三路< 鑫苑 > 19F]]></ addr >
</ person >
<toname><![CDATA[经三路<鑫 苑>19F]]></toname>
</person>
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Date;
/**
* Created by IntelliJ IDEA.
*
* @author leizhimin 2010-7-10 16:03:39
*/
public class Person {
private String name;
private String addr;
public Person(String name, String addr) {
this .name = name;
this .addr = addr;
}
public static void main(String[] args) {
Person p = new Person("张三" , "经三路<鑫苑>19F" );
p.showXml();
}
public void showXml() {
String xml1, xml2, xml3;
Document doc = DocumentHelper.createDocument();
doc.setXMLEncoding("GBK" );
Element root = doc.addElement("person" );
if (addr != null )
addElement(root, "toname" , "<![CDATA[" + this .addr + "]]>" );
else
addElement(root, "toname" , this .addr);
xml1 = doc.asXML(); //默认转义
xml2 = formatXml(doc, "GBK" , true ); //转义
xml3 = formatXml(doc, "GBK" , false ); //不转义
System.out.println(xml1);
System.out.println("-------------------------" );
System.out.println(xml2);
System.out.println("-------------------------" );
System.out.println(xml3);
}
/**
* 在指定的元素下添加一个新的子元素
*
* @param e 父元素
* @param name 子元素名
* @param value 子元素值
* @return 新加子元素
*/
public static Element addElement(Element e, String name, Object value) {
Element x = e.addElement(name);
if (value == null || "".equals(value.toString().trim())) {
x.setText("");
} else if (value instanceof Date) {
x.setText(DateToolkit.toISOFormat((Date) value));
} else {
x.setText(value.toString());
}
return x;
}
/**
* 格式化XML文档
*
* @param document xml文档
* @param charset 字符串的编码
* @param istrans 是否对属性和元素值进行转移
* @return 格式化后XML字符串
*/
public static String formatXml(Document document, String charset, boolean istrans) {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(charset);
StringWriter sw = new StringWriter();
XMLWriter xw = new XMLWriter(sw, format);
xw.setEscapeText(istrans);
try {
xw.write(document);
xw.flush();
xw.close();
} catch (IOException e) {
System.out.println("格式化XML文档发生异常,请检查!" );
e.printStackTrace();
}
return sw.toString();
}
}
<person><toname><! [CDATA[经三路<鑫苑>19F]]></toname></person>
-------------------------
<?xml version="1.0" encoding="GBK"?>
<toname><![CDATA[经三路<鑫 苑>19F]]></toname>
</person>
<?xml version="1.0" encoding="GBK"?>
<toname><![CDATA[经三路<鑫苑>19F]]></toname>
</person>
Process finished with exit code 0
本文出自 “熔 岩 ” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/347348
相关推荐
要使用DOM4J读取XML文档,首先需要创建一个`SAXReader`对象,然后调用`read`方法传入XML文件路径。这将返回一个`Document`对象,我们可以从中获取所有元素信息。 ```java File file = new File("path_to_xml_file")...
基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。
除了基本的读写操作,DOM4J还支持XPath查询,这是一种强大的定位XML元素的方式。通过`XPathExpression`和`XPathFactory`,你可以编写XPath表达式来查找XML文档中的特定节点。例如,`//elementName`可以匹配所有名为`...
例子比较简单”的描述中,我们可以推断出这个压缩包包含了一些关于如何使用DOM4J进行XML读写的基本示例。以下是对这些关键知识点的详细解释: 1. **XML解析**:DOM4J支持两种解析XML文档的方式:SAX(Simple API ...
在你的`analysisXml`示例中,很可能是通过DOM4J库读取了一个名为`dom4j.xml`的文件,分析其结构,提取或修改数据,然后再将结果写回新的XML文件。这个过程可能包括获取特定元素、遍历元素树、修改属性值,甚至可能...
**使用DOM4J对XML的读写** DOM4J是一个非常强大的Java库,专门用于处理XML文档。它提供了丰富的API,使得XML的读取、创建、修改和解析变得简单易行。相较于JDOM,DOM4J确实提供了更多的功能,虽然在学习曲线方面...
DOM4J的核心优势之一在于其丰富的接口体系,这些接口定义在`org.dom4j`包内,提供了对XML文档进行读写、查询、修改等操作的能力。 1. **Attribute**: 代表XML中的属性,可用于获取和设置属性值。 2. **Branch**: ...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的方式来解析、创建、修改和操作XML数据。在本教程中,我们将深入探讨如何使用DOM4J...在实际项目中,DOM4J常被用于数据交换、配置文件读写等场景。
导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写操作。 总之,DOM4J作为一款强大的XML处理工具,为Java开发者提供了丰富的功能和良好的性能,是处理XML文档的理想选择。无论是小型项目还是大型企业级...
在提供的压缩包中,可能包含了dom4j的jar文件,解压后将其引入项目,就可以开始使用DOM4J进行XML操作了。 DOM4J不仅提供了基本的XML操作,还支持命名空间、事件处理、DTD和XML Schema验证等功能,是Java开发中处理...
在这个"dom4j_XML.rar"压缩包中,我们很可能会找到一个实际的示例,展示如何使用DOM4J来解析XML文件。 首先,让我们理解XML(eXtensible Markup Language)的基本概念。XML是一种标记语言,常用于存储和传输数据,...
文件的发送方先将文件信息转换为XML格式,通过TCP发送,接收方接收到XML数据后,使用DOM4J解析并执行相应的文件接收操作。 总的来说,这个项目综合运用了TCP和UDP两种不同的网络传输协议,以及DOM4J这一强大的XML...
总结,DOM4J作为一款强大的XML处理工具,不仅提供了丰富的API,还支持高效的读写操作和XPath查询,使得开发者能够轻松地进行XML文档的处理和操作。无论是在小型项目还是大型企业级应用中,DOM4J都是处理XML不可或缺...
本实例"xmldemo"将向我们展示如何利用DOM4J进行XML的读写操作。 首先,理解DOM4J的核心概念。DOM4J使用了Document对象来表示整个XML文档,Element代表XML的元素节点,Attribute代表属性,Text代表文本内容。通过...
以下是对Dom4j读写XML的详细讲解: 一、Document对象相关 1. **读取XML文件**:通过`SAXReader`实例化并调用`read()`方法,可以将XML文件读取为`Document`对象。例如: ```java SAXReader reader = new ...
Dom4j解析教程。详细讲解如何使用dom4j解析xml,简单易懂。
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...
Dom4j是一个灵活且高效的处理XML的Java库,它提供了XML的读写、遍历、修改等功能。与DOM(Document Object Model)相比,Dom4j使用起来更高效,内存占用更小,尤其适合处理大型XML文件。 接下来,我们关注XPath的...