<!-- [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);//自己调用自己--递归
}
}
}
}
===========================
< | < | 小于号 |
> | > | 大于号 |
& | & | 和 |
' | ' | 单引号 |
" | " | 双引号 |
本文出自 “熔 岩 ” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/347348