技术开发 频道

dom4j 学习

【IT168技术文档】直接看代码..
dom4j 的一般使用都在里面了
/lib/dom4j-1.6.1.jar
/lib/jaxen-1.1-beta-6.jar
package useDom4j.test.supper; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import junit.framework.TestCase; import org.dom4j.Document; import org.dom4j.DocumentFactory; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.QName; import org.dom4j.Visitor; import org.dom4j.VisitorSupport; import org.dom4j.XPath; import org.dom4j.io.DOMReader; import org.dom4j.io.HTMLWriter; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class useDom4jTest extends TestCase { //use all private String path ; private ClassLoader clo; // file path -> bin private String classPath ; //use save static private Document doc; private String filese; protected void setUp() throws Exception { super.setUp(); path = "useDom4j/test/config/test.xml"; clo = this.getClass().getClassLoader(); classPath = System.getProperty("java.class.path").split(";")[0] ; filese = System.getProperty("file.separator"); } protected void tearDown() throws Exception { super.tearDown(); } public void testRead()throws Exception{ SAXReader sax = new SAXReader(); //File read Document docF = sax.read( new File(clo.getResource(path).getFile()) ); assertNotNull("is File saxReader err",docF); //InPutStream read Document docI = sax.read( clo.getResourceAsStream(path) ); assertNotNull("is InPutStream saxReader err",docI); //URL read Document docU = sax.read( clo.getResource(path) ); assertNotNull("is Url saxReader err",docU); } /** converts a W3C DOM document into a dom4j document */ public void testConversion() throws Exception{ DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); DocumentBuilder dombuilder=domfac.newDocumentBuilder(); InputStream input = clo.getResourceAsStream(path) ; org.w3c.dom.Document doc3c = dombuilder.parse( input ); DOMReader xmlReader = new DOMReader(); assertEquals( " Conversion : W3C DOM-> dom4j DOM err", xmlReader.read(doc3c) instanceof Document,true ); } public void testCreate()throws Exception{ DocumentFactory factory = DocumentFactory.getInstance(); doc = factory.createDocument(); //root Create Element root = doc.addElement("testElement"); assertNotNull("is root Create err",root); Element author2 = root.addElement( "author" ) .addAttribute( "name", "Toby" ) .addAttribute( "location", "Germany" ) .addText( "Tobias Rademacher" ); Element author1 = root.addElement( "author" ) .addAttribute( "name", "James" ) .addAttribute( "location", "UK" ) .addText( "James Strachan" ); //Test Create //use XPath ->jaxen-xxx.jar assertEquals("create Element author2 err", doc.selectSingleNode("/testElement/author[@name='Toby']").getText() ,"Tobias Rademacher"); assertEquals("create Element author1 err", doc.selectSingleNode("/testElement/author[@location='UK']/@name").getText() ,"James"); } public void testPrintingHTML()throws Exception{ String testSaveXml = "useDom4j/test/config/testHtml.html"; testSaveXml = classPath+filese+testSaveXml; File file = getFile(testSaveXml); //Save file.html HTMLWriter writer = new HTMLWriter(new FileOutputStream( file )); writer.write(new SAXReader().read( clo.getResource(path) )); writer.flush(); } public void testIterator(){ Element root = this.doc.getRootElement(); //Iterator Iterator elementIterator = root.elementIterator(); while(elementIterator.hasNext()){ Element element = (Element)elementIterator.next(); assertNotNull("not attr name", element.selectSingleNode("./@name") ); assertNotNull("not attr location", element.selectSingleNode("./@location") ); assertNotNull("not Text ", element.selectSingleNode(".").getText() ); } //for -> ./XX for ( int i = 0, size = root.nodeCount(); i < size; i++ ) { Node node = root.node(i); if ( node instanceof Element ) { Element element = (Element)node; assertNotNull("not attr name", element.selectSingleNode("./@name") ); assertNotNull("not attr location", element.selectSingleNode("./@location") ); assertNotNull("not Text ", element.selectSingleNode(".").getText() ); } } //List List elements = root.elements(); int size = elements.size() ; if ( size > 4 ) { elements.subList( 3, 4 ).clear(); assertEquals("List is not clear",size-elements.size()==1,true); } } /** use test.xml test xpath -> /project/organization/ <organization> <name>MetaStuff Ltd.</name> <url>http://sourceforge.net/projects/dom4j</url> <logo>http://sourceforge.net/sflogo.php?group_id=16035</logo> </organization> xpath -> /project/dependencies/dependency[groupId='msv'] <dependency> <groupId>msv</groupId> <artifactId>xsdlib</artifactId> <version>20030807</version> <url>https://msv.dev.java.net/</url> </dependency> */ public void testXpath()throws Exception{ XPath xpathSelector = DocumentHelper.createXPath("/project/organization/*"); Document docT = new SAXReader().read( clo.getResourceAsStream(path) ); List results = xpathSelector.selectNodes(docT); for ( Iterator iter = results.iterator(); iter.hasNext(); ) { Element element = (Element) iter.next(); if(element.getName().equals("name")){ assertEquals("name err", element.getText().equals("MetaStuff Ltd."),true); } if(element.getName().equals("url")){ assertEquals("url err", element.getText().equals("http://sourceforge.net/projects/dom4j"),true); } if(element.getName().equals("logo")){ assertEquals("logo err", element.getText().equals("http://sourceforge.net/sflogo.php?group_id=16035"),true); } } // select String url = docT.valueOf( "/project/dependencies/dependency[groupId='msv']/url" ); assertEquals("Url err", url.equals("https://msv.dev.java.net/"),true); Number count = docT.numberValueOf( "/project/dependencies/dependency[groupId='msv']/version" ); assertEquals("Url err", count.intValue()==20030807,true); } public void testVisitor(){ Visitor visitor = new VisitorSupport() { public void visit(Element element) { System.out.println( "Entity name: " + element.getName() + " text :" + element.getText() ); } }; doc.accept( visitor ); } // element.clone ; element.createCopy ; public void testInsertElementAt() throws Exception{ Element root = this.doc.getRootElement(); Element oldElement = (Element)doc.selectSingleNode("/testElement/author[@name='Toby']"); Element newElement = (Element) oldElement.clone(); List list = root.content(); list.add( root.indexOf(oldElement)+1,newElement ); } public void testSave()throws Exception{ String testSaveXml = "useDom4j/test/config/testSave.xml"; testSaveXml = classPath+filese+testSaveXml; File file = getFile(testSaveXml); //Save file.xml XMLWriter writer = new XMLWriter(new FileOutputStream( file )); writer.write(doc); writer.flush(); } private File getFile(String testSaveXml) throws IOException { File file = null ; URL url = clo.getResource(testSaveXml); if(url==null){ file = new File(testSaveXml); file.createNewFile(); }else{ file = new File( url.getFile() ); } return file; } }
原文地址
0
相关文章