package com.dom4j; import java.io.FileWriter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Iterator; import java.util.List; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamSource; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.DocumentResult; import org.dom4j.io.DocumentSource; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Test1 { public static void main(String[] args){ //C:/Users/Administrator.PMIMP83HWNIKWOV/Workspaces/MyEclipse 9/TestWeb/WebRoot/ /** * 我使用绝对路径就会报错unknown protocol: c,不知道什么原因,现在使用的是相对路径,如果不好使用相对路径,直接使用File文件吧 */ //String uri="WebRoot/xml/languages.xml"; //Document doc=praseXmlToDocument(uri); //System.out.println(doc.getRootElement().getName()); //Iteratorasdom(doc); //navigation(doc); //treeWalk(doc); //Document doc=createDocument(); //DocmentToFile(doc,""); StringToDoc(); } public static Document praseXmlToDocument(String url){ /** * 解析xml文件成document对象 */ Document document=null; try { SAXReader reader=new SAXReader(); document = reader.read(url); } catch (DocumentException e) { e.printStackTrace(); } return document; } public static void Iteratorasdom(Document document){ /** * document获取根元素: .getRootElement() * Node类型获取所有字节点的迭代器 .elementIterator() * 获取指定名称的所有子节点的迭代器 .elementIterator(String name) * 获取所有属性的迭代器 .attributeIterator() */ Element root=document.getRootElement(); /*for(Iterator i=root.elementIterator();i.hasNext();){ Element element=(Element) i.next(); System.out.println(element.getName()); for(Iterator it=element.attributeIterator();it.hasNext();){ Attribute att=(Attribute) it.next(); System.out.println(att.getName()+"="+att.getStringValue()); } }*/ for(Iterator i=root.elementIterator("lan");i.hasNext();){ Element element=(Element) i.next(); for(Iterator it=element.attributeIterator();it.hasNext();){ Attribute att=(Attribute) it.next(); System.out.println(att.getName()+"="+att.getStringValue()); } } } public static void navigation(Document document){ /* 使用selectNodes需要使用jaxen.jar * .selectNodes("//languages/lan/name");获取所有指定名称节点的集合 * .selectSingleNode("//languages/lan/name"); 获取第一个指定名称的节点 * node和document对象都有这个方法 * */ /*List list=document.selectNodes("//languages/lan/name"); for(int i=0;i<list.size();i++){ Node node=(Node) list.get(i); System.out.println(node.getText()); }*/ Node node=document.selectSingleNode("//languages/lan/name"); System.out.println(node.getText()); } /*遍历document或者element元素的方法*/ public static void treeWalk(Document document) { treeWalk( document.getRootElement() ); } public static void treeWalk(Element element) { for ( int i = 0, size = element.nodeCount(); i < size; i++ ) { Node node = element.node(i); if ( node instanceof Element ) { treeWalk( (Element) node ); } else { System.out.println(node.getText()); } } } public static Document createDocument(){ /** * 添加子元素.addElement(String name) * 添加属性 .addAttribute(key,value) * 添加值 .addText(String value) */ Document document=DocumentHelper.createDocument(); Element root=document.addElement("root"); Element author1=root.addElement("author") .addAttribute("name", "James") .addAttribute("location", "UK") .addText("James Strachan"); Element author2=root.addElement("author") .addAttribute("name", "Bob") .addAttribute("location", "US") .addText("Bob Mchirter"); return document; } public static void DocmentToFile(Document doc,String uri){ /* 第一种方法,使用XMLWriter对象的writer方法*/ XMLWriter writer = null; /*try { writer=new XMLWriter(new FileWriter(uri)); writer.write(doc); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ /* * 输出到控制台 * */ OutputFormat format=OutputFormat.createPrettyPrint(); try { writer=new XMLWriter(System.out,format); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { writer.write(doc); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void StringToDoc(){ /* 将docment对象转换称为xml */ /*Document doc=createDocument(); String text=doc.asXML(); System.out.println(text);*/ /* 将text对象转换称为document*/ String text="<a><b>1</b><b>2</b><b>3</b></a>"; try { Document document=DocumentHelper.parseText(text); treeWalk(document); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Document a(Document doc,String stylesheet) throws IOException{ TransformerFactory factory=TransformerFactory.newInstance(); Transformer transformer = null; try { transformer=factory.newTransformer(new StreamSource(stylesheet)); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } DocumentSource source=new DocumentSource(doc); DocumentResult result=new DocumentResult(); try { transformer.transform( source, result ); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } Document transformedDoc = result.getDocument(); XMLWriter writer = null; writer=new XMLWriter(new FileWriter("doc.doc")); writer.write(transformedDoc); return transformedDoc; } }