利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合

合集下载

使用dom4j解析xml文件

使用dom4j解析xml文件

使⽤dom4j解析xml⽂件⼀.读取指定位置下的资源⽂件src根⽬录下类名.class.getResourceAsStream("/⽂件名");与读取配置⽂件的类在同⼀包类名.class.getResourceAsStream("⽂件名");WEB-INF(或其⼦⽬录下)ServletContext servletContext=request.getServletContext();InputStream ins = servletContext.getResourceAsStream("/WEB-INF/⽂件名");⼆.解析指定路径下的资源⽂件:properties⽂件的解析⽅式有java.util.properties这个类来完成(properties⽂件以键值对的形式存在,需通过键名来获取值)import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class PropertiseDemo {public static void main(String[] args) throws IOException {//获取到同包下的资源⽂件将其转化为流对象InputStream ins=PropertiseDemo.class.getResourceAsStream("/db.properties");//需要专业的⼯具类来将流中的数据解析出来Properties p=new Properties();p.load(ins);System.out.println("uname");System.out.println("upass");}}解析xml⽂件xml⽂件传统解析⽅式有dom4解析jdk/jdom解析,sax解析jdk/jdom 和 sax解析⽅式都是由上往下解析dom4j解析是由外到内解析,需要导包(dom4j-1.6.1.jar,)由于jdk/jdom和sax解析解析步骤⽐较复杂,使⽤的⼈较少xpath等同数据库的select语句document.selectNodes(xpath);//查⼀组document.selectSingleNode(xpath);//查单个import java.io.File;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Dome02 {public static void main(String[] args) throws Exception {// dom4j+path 解析xml⽂件SAXReader saxReader = new SAXReader();Document document = saxReader.read(new File("D:\\eclipse\\j2ee06\\src\\com\\temp\\config.xml"));// 查⼀组for (Object o : document.selectNodes("/config/action/forward")) {Element element = (Element) o;System.out.print(element.attributeValue("mane"));System.out.print(element.attributeValue("path"));System.out.println(element.attributeValue("redirect"));}//查询⼀个Element element=(Element)document.selectSingleNode("/config/action");System.out.println(element.attributeValue("path"));}}列如:import java.io.InputStream;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Temp {public static void main(String[] args) throws Exception {InputStream inputStream = Temp.class.getResourceAsStream("/config.xml");SAXReader sax = new SAXReader();Document document = sax.read(inputStream);// 1. 获取所有action中type的值List<Element> stuElement = document.selectNodes("/config/action");for (Element element : stuElement) {String type = element.attributeValue("type");System.out.println(type);}// 2.获取第⼆个action中的type的值for (Element element : stuElement) {if ("/loginAction".equals(element.attributeValue("path"))) {String type = element.attributeValue("type");System.out.println(type);}}// 3.获取第⼆个action的所有forward的pathfor (Element element : stuElement) {if ("/loginAction".equals(element.attributeValue("path"))) {List<Element> forward = element.selectNodes("forward");for (Element forwardElement : forward) {String path = forwardElement.attributeValue("path");System.out.println(path);}}}// 4、获取第⼆个action的第⼆个forward的pathfor (Element element : stuElement) {if ("/loginAction".equals(element.attributeValue("path"))) {List<Element> forward = (List<Element>) element.selectNodes("forward");for (Element forwardElement : forward) {if ("success".equals(forwardElement.attributeValue("name"))) {String path = forwardElement.attributeValue("path");System.out.println(path);}}}}}}。

java读取XML文件的四种方法总结(必看篇)

java读取XML文件的四种方法总结(必看篇)

java读取XML⽂件的四种⽅法总结(必看篇)JAVA操作XML⽂档主要有四种⽅式,分别是DOM、SAX、JDOM和DOM4J,DOM和SAX是官⽅提供的,⽽JDOM和DOM4J 则是引⽤第三⽅库的,其中⽤的最多的是DOM4J⽅式。

运⾏效率和内存使⽤⽅⾯最优的是SAX,但是由于SAX是基于事件的⽅式,所以SAX⽆法在编写XML的过程中对已编写内容进⾏修改,但对于不⽤进⾏频繁修改的需求,还是应该选择使⽤SAX。

下⾯基于这四种⽅式来读取XML⽂件。

第⼀,以DOM的⽅式实现。

package xmls;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import java.io.File;import java.io.IOException;/*** Created by lenovo on 2017-6-3.*/public class DOMReadDemo {public static void main(String[] args){DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();try{DocumentBuilder db = dbf.newDocumentBuilder();Document document = db.parse("src/xmls/DOM.xml");NodeList booklist = document.getElementsByTagName("book");for(int i = 0; i < booklist.getLength(); i++){System.out.println("--------第" + (i+1) + "本书----------");Element ele = (Element) booklist.item(i);NodeList childNodes= ele.getChildNodes();for(int j = 0; j < childNodes.getLength(); j++){Node n = childNodes.item(j);if(n.getNodeName() != "#text"){System.out.println(n.getNodeName() + ":" + n.getTextContent());}}System.out.println("---------------------------------");}}catch (ParserConfigurationException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}catch (SAXException e){e.printStackTrace();}}}第⼆,以SAX的⽅式实现。

Dom4j解析XML文档

Dom4j解析XML文档

要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在/ 目前最新dom4j包下载地址:/sourceforge/dom4j/dom4j-1.6.1.zip解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7.jar.以下是相关操作:一.Document对象相关1.读取XML文件,获得document对象.SAXReader reader = new SAXReader();Document document = reader.read(new File("input.xml"));2.解析XML形式的文本,得到document对象.String text = "<members></members>";Document document = DocumentHelper.parseText(text);3.主动创建document对象.Document document = DocumentHelper.createDocument();Element root = document.addElement("members");// 创建根节点二.节点相关1.获取文档的根节点.Element rootElm = document.getRootElement();2.取得某节点的单个子节点.Element memberElm=root.element("member");// "member"是节点名3.取得节点的文字String text=memberElm.getText();也可以用:String text=root.elementText("name");这个是取得根节点下的name字节点的文字.4.取得某节点下名为"member"的所有字节点并进行遍历.List nodes = rootElm.elements("member");for (Iterator it = nodes.iterator(); it.hasNext();) {Element elm = (Element) it.next();// do something}5.对某节点下的所有子节点进行遍历.for(Iterator it=root.elementIterator();it.hasNext();){Element element = (Element) it.next();// do something}6.在某节点下添加子节点.Element ageElm = newMemberElm.addElement("age");7.设置节点文字.ageElm.setText("29");8.删除某节点.parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点三.属性相关.1.取得某节点下的某属性Element root=document.getRootElement();Attribute attribute=root.attribute("size");// 属性名name2.取得属性的文字String text=attribute.getText();也可以用:String text2=root.element("name").attributeValue("firstname");这个是取得根节点下name字节点的属性firstname的值.3.遍历某节点的所有属性Element root=document.getRootElement();for(Iterator it=root.attributeIterator();it.hasNext();){Attribute attribute = (Attribute) it.next();String text=attribute.getText();System.out.println(text);}4.设置某节点的属性和文字.newMemberElm.addAttribute("name", "sitinspring");5.设置属性的文字Attribute attribute=root.attribute("name");attribute.setText("sitinspring");6.删除某属性Attribute attribute=root.attribute("size");// 属性名nameroot.remove(attribute);四.将文档写入XML文件.1.文档中全为英文,不设置编码,直接写入的形式.XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));writer.write(document);writer.close();2.文档中含有中文,设置编码格式写入的形式.OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("GBK"); // 指定XML编码XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);writer.write(document);writer.close();五.字符串与XML的转换1.将字符串转化为XMLString text = "<members> <member>sitinspring</member> </members>"; Document document = DocumentHelper.parseText(text);2.将文档或节点的XML转化为字符串.SAXReader reader = new SAXReader();Document document = reader.read(new File("input.xml"));Element root=document.getRootElement();String docXmlText=document.asXML();String rootXmlText=root.asXML();Element memberElm=root.element("member");String memberXmlText=memberElm.asXML();六.使用XPath快速找到节点.读取的XML文档示例<?xml version="1.0" encoding="UTF-8"?><projectDescription><name>MemberManagement</name><comment></comment><projects><project>PRJ1</project><project>PRJ2</project><project>PRJ3</project><project>PRJ4</project></projects><buildSpec><buildCommand><name>org.eclipse.jdt.core.javabuilder</name><arguments></arguments></buildCommand></buildSpec><natures><nature>org.eclipse.jdt.core.javanature</nature></natures></projectDescription>使用XPath快速找到节点project.public static void main(String[] args){SAXReader reader = new SAXReader();try{Document doc = reader.read(new File("sample.xml"));List projects=doc.selectNodes("/projectDescription/projects/project");Iterator it=projects.iterator();while(it.hasNext()){Element elm=(Element)it.next();System.out.println(elm.getText());}}catch(Exception ex){ex.printStackTrace();}}级别:初级Deepak Vohra (dvohra09@), Web 开发人员2004 年4 月01 日dom4j 是一种解析XML 文档的开放源代码XML 框架。

java使用xpath和dom4j解析xml

java使用xpath和dom4j解析xml

java使用xpath和dom4j解析xmlXPath是一门在XML文档中查找信息的语言,下面介绍一下java使用xpath和dom4j解析xml的示例,大家参考使用吧1 XML文件解析的4种方法通常解析XML文件有四种经典的方法。

基本的解析方式有两种,一种叫SAX,另一种叫DOM。

SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。

在此基础上,为了减少DOM、SAX的编码量,出现了JDOM,其优点是,20-80原则(帕累托法则),极大减少了代码量。

通常情况下JDOM使用时满足要实现的功能简单,如解析、创建等要求。

但在底层,JDOM还是使用SAX(最常用)、DOM、Xa nan文档。

另外一种是DOM4J,是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用的特点,同时它也是一个开放源代码的软件。

如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。

具体四种方法的使用,百度一下,会有众多详细的介绍。

2 XPath简单介绍XPath是一门在XML文档中查找信息的语言。

XPath用于在 XML 文档中通过元素和属性进行导航,并对元素和属性进行遍历。

XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。

因此,对 XPath 的理解是很多高级 XML 应用的基础。

XPath非常类似对数据库操作的SQL语言,或者说JQuery,它可以方便开发者抓起文档中需要的东西。

其中DOM4J也支持XPath的使用。

3 DOM4J使用XPathDOM4J使用XPath解析XML文档是,首先需要在项目中引用两个JAR包:dom4j-1.6.1.jar:DOM4J软件包,下载地址/projects/dom4j/;jaxen-xx.xx.jar:通常不添加此包,会引发异常(ng.NoClassDefFoundError: org/jaxen/ JaxenException),下载地址/releases.html。

java dom4j 解析

java dom4j 解析

java dom4j 解析
DOM4J是一个用于处理XML文档的Java开源库。

它提供了简单
易用的API,可以方便地解析、创建和操作XML文档。

DOM4J采用了
基于树形结构的解析方式,可以轻松地遍历和操作XML文档的节点。

要使用DOM4J解析XML文档,首先需要引入DOM4J库。

然后,
可以通过以下步骤进行解析:
1. 读取XML文档,使用SAXReader类的read方法加载XML文档,将其转换为Document对象。

2. 获取根节点,通过Document对象的getRootElement方法获
取XML文档的根节点。

3. 遍历节点,可以使用递归或迭代的方式遍历XML文档的节点,获取节点的名称、属性、文本内容等信息。

4. 操作节点,可以对节点进行增删改查操作,例如添加新节点、修改节点内容、删除节点等。

5. 获取节点信息,可以通过节点对象的方法获取节点的名称、文本内容、属性值等信息。

在使用DOM4J解析XML文档时,需要注意处理异常情况,例如文件不存在、格式错误等。

可以使用try-catch块来捕获异常,并进行相应的处理。

总的来说,DOM4J提供了一种简单而强大的方式来解析XML文档,通过上述步骤可以轻松地实现对XML文档的解析和操作。

DOM4J 还支持XPath表达式和XSLT转换等高级特性,可以满足各种复杂的XML处理需求。

希望以上信息能够帮助你更好地理解和应用DOM4J 库。

使用dom4j生成xml字符串,以及解析xml字符串

使用dom4j生成xml字符串,以及解析xml字符串

使⽤dom4j⽣成xml字符串,以及解析xml字符串基于dom4j-1.6.1.jarimport java.io.IOException;import java.io.StringWriter;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import java.util.logging.Level;import java.util.logging.Logger;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;/**** @author y*/public class Test {/*** @param args the command line arguments*/public static void main(String[] args) throws DocumentException {Map<String, Object> map = new HashMap<String, Object>();map.put("name", "李四");map.put("age", 25);//System.out.println(map2xml(map));List<Object> list = new ArrayList<Object>();list.add("测试1");list.add("测试2");list.add("测试3");//System.out.println(list2xml(list,"items"));List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();Map<String,Object> map1 = new HashMap<String,Object>();map1.put("name", "张三");map1.put("age", 23);listMap.add(map1);map1 = new HashMap<String,Object>();map1.put("name", "李四");map1.put("age", 24);listMap.add(map1);map1 = new HashMap<String,Object>();map1.put("name", "王五");map1.put("age", 25);listMap.add(map1);System.out.println(listMap2xml(listMap,"users","user"));}public static String listMap2xml(List<Map<String,Object>> list,String listRoot,String mapRoot){Document doc = DocumentHelper.createDocument();Element rootEle = doc.addElement("result");Element noEle = rootEle.addElement("no");Element msgEle = rootEle.addElement("msg");if(null!=list && !list.isEmpty()){noEle.setText("1");msgEle.setText("成功获取相关信息");Element listRootEle = rootEle.addElement(listRoot);for(Map<String,Object> map:list){Element mapRootELe = listRootEle.addElement(mapRoot);Set<Map.Entry<String,Object>> set = map.entrySet();Iterator<Map.Entry<String,Object>> iter = set.iterator();while(iter.hasNext()){Map.Entry<String,Object> entry = (Map.Entry<String,Object>)iter.next(); Element ele = mapRootELe.addElement(entry.getKey());ele.setText(String.valueOf(entry.getValue()));}}}else{noEle.setText("0");msgEle.setText("没有获取到相关信息");}StringWriter sw = new StringWriter();OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");try {XMLWriter xmlWriter = new XMLWriter(sw, format);xmlWriter.write(doc);} catch (IOException ex) {Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);}finally{try {sw.close();} catch (IOException ex) {Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);}}return sw.toString();}public static String list2xml(List<Object> list,String itemRoot){Document doc = DocumentHelper.createDocument();Element rootEle = doc.addElement("result");Element noEle = rootEle.addElement("no");Element msgEle = rootEle.addElement("msg");if(null!=list && !list.isEmpty()){noEle.setText("1");msgEle.setText("成功获取相关信息");Element itemRootEle = rootEle.addElement(itemRoot);for(Object obj:list){Element ele = itemRootEle.addElement("item");ele.setText(String.valueOf(obj));}}else{noEle.setText("0");msgEle.setText("没有获取到相关信息");}StringWriter sw = new StringWriter();OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");try {XMLWriter xmlWriter = new XMLWriter(sw, format);xmlWriter.write(doc);} catch (IOException ex) {Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);}finally{try {sw.close();} catch (IOException ex) {Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);}}return sw.toString();}public static String map2xml(Map<String, Object> map) {Document doc = DocumentHelper.createDocument();Element rootEle = doc.addElement("result");Element noEle = rootEle.addElement("no");Element msgEle = rootEle.addElement("msg");if(null!=map && !map.isEmpty()){noEle.setText("1");msgEle.setText("成功获取相关信息");Set<Map.Entry<String, Object>> set = map.entrySet();Iterator<Map.Entry<String, Object>> iter = set.iterator();while(iter.hasNext()){Map.Entry<String, Object> entry = (Map.Entry<String, Object>) iter.next(); Element ele = rootEle.addElement(entry.getKey());ele.setText(String.valueOf(entry.getValue()));}}else{noEle.setText("0");msgEle.setText("没有获取到相关信息");}StringWriter sw = new StringWriter();OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");try {XMLWriter xmlWriter = new XMLWriter(sw, format);xmlWriter.write(doc);} catch (IOException ex) {Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);}finally{try {sw.close();} catch (IOException ex) {Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);}}return sw.toString();}public static void test4() {Document doc = DocumentHelper.createDocument();Element rootEle = doc.addElement("sudent");Element nameEle = rootEle.addElement("name");nameEle.setText("张三");Element ageEle = rootEle.addElement("age");ageEle.setText("25");try {StringWriter sw = new StringWriter();OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");XMLWriter xmlWriter = new XMLWriter(sw, format);xmlWriter.write(doc);System.out.println(sw.toString());} catch (IOException ex) {Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);}}public static void test3() throws DocumentException {String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+ "<books>"+ " <book>"+ " <name>Think in Java</name>"+ " <price>120.0</price>"+ " <chapters>"+ " <c>001</c>"+ " <c>002</c>"+ " <c>003</c>"+ " </chapters>"+ " </book>"+ " <book>"+ " <name>Think in Java2</name>"+ " <price>220.0</price>"+ " </book>"+ "</books>";Document doc = DocumentHelper.parseText(str);Element books = doc.getRootElement();List<Element> childEles = books.elements();Iterator<Element> iter = childEles.iterator();while (iter.hasNext()) {Element book = iter.next();Element name = book.element("name");Element price = book.element("price");System.out.println("name:" + name.getText() + ",price:" + price.getText()); Element chapters = book.element("chapters");if (null != chapters) {Iterator<Element> chaptersIter = chapters.elementIterator();if (null != chaptersIter) {while (chaptersIter.hasNext()) {Element c = chaptersIter.next();System.out.println("===>" + c.getText());}}}}}public static void test2() throws DocumentException {String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+ "<books>"+ " <book>"+ " <name>Think in Java</name>"+ " <price>120.0</price>"+ " </book>"+ " <book>"+ " <name>Think in Java2</name>"+ " <price>220.0</price>"+ " </book>"+ "</books>";Document doc = DocumentHelper.parseText(str);Element books = doc.getRootElement();List<Element> childEles = books.elements();Iterator<Element> iter = childEles.iterator();while (iter.hasNext()) {Element book = iter.next();Element name = book.element("name");Element price = book.element("price");System.out.println("name:" + name.getText() + ",price:" + price.getText()); }}public static void test1() throws DocumentException {String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+ "<dzswdjz>"+ " <qr_code>"+ " <nsrsbh>nsrsbh</nsrsbh >"+ " <retStatus >retStatus</retStatus>"+ " <img_name>img_name</img_name>"+ " <img_byteString>img_byteString</img_byteString>"+ " </qr_code>"+ "</dzswdjz>";Document doc = DocumentHelper.parseText(str);//获取到⽗节点Element dzswdjz = doc.getRootElement();//定位到qr_code节点Element qr_code = dzswdjz.element("qr_code");Element nsrsbh = qr_code.element("nsrsbh");Element retStatus = qr_code.element("retStatus");Element img_name = qr_code.element("img_name");Element img_byteString = qr_code.element("img_byteString");System.out.println("nsrsbh:" + nsrsbh.getText());System.out.println("retStatus:" + retStatus.getText());System.out.println("img_name:" + img_name.getText());System.out.println("img_byteString:" + img_byteString.getText()); }}。

详解 Dom4j进行读取JAVA XML文件

详解 Dom4j进行读取JAVA XML文件

详解 Dom4j进行读取JAVA XML文件详解dom4j进行读取javaxml文件dom4j进行读取javaxml文件首先引入dom4jjar圣塞雷县建立xml文件,例如图:创建好xml文件后,我们根据其逻辑关系,建立如下类:country(实体国家类:建立province(省份)实体类创建city(城市)实体类不好,我们须要的guo.xml,和三个对应的实体类以建,下面我们建立个法,具体内容和注解如下:packagetest;importjava.io.inputstream;importjava.util.arraylist;importjava.util.list;importorg.dom4j.document;importorg.dom4j.documentexception;importorg.dom4j.element;importorg.dom4j.io.s axreader;importentity.country;importentity.province;publicclasstestmain{main()方/***@paramargs*/publicstaticvoidmain(string[]args){//todoauto-generatedmethodstub//创建saxreader的对象saxreadersr=newsaxreader();//根据文件流加载xml文件inputstreamis=testmain.class.getresourceasstream(\);try{//利用saxreader的对象的read方法展开加载documentdt=sr.read(is);//document对象的getrootelement()获得xml文件中的第一层节点,即binggoelementbinggo=dt.getrootelement();//我们对其进行输出如下输出:binggosystem.out.println(\第一层节点名称:\+binggo.getname());/***如下是获得单个节点下的所有内容,*获取其它单个节点同理*///以获取其它名称相似,下一步我们将要赢得country节点中属性名称的值。

xml通过dom4j解析成java对象

xml通过dom4j解析成java对象

xml通过dom4j解析成java对象要解析的xml<?xml version="1.0" encoding="UTF-8"?><config><action path="/regAction" type="test.RegAction"><forward name="failed" path="/reg.jsp" redirect="false" /><forward name="success" path="/login.jsp" redirect="true" /></action><action path="/loginAction" type="test.LoginAction"><forward name="failed" path="/login.jsp" redirect="false" /><forward name="success" path="/main.jsp" redirect="true" /></action></config>java代码解析前⼀定要先把jar包导⼊接下来我来定义实体类实体类根据上⾯的xml去定义。

实体类定义的顺序⼀定是由⾥向外去定义的。

定义顺序 forward标签模型 -> actiong标签模型 -> config标签模型forward标签模型public class ForwardModal {public ForwardModal() {super();}public ForwardModal(String name, String path, boolean redirct) {super(); = name;this.path = path;this.redirct = redirct;}private String name;private String path;private boolean redirct;public String getName() {return name;}public void setName(String name) { = name;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public boolean isRedirct() {return redirct;}public void setRedirct(boolean redirct) {this.redirct = redirct;}@Overridepublic String toString() {return "ForwardModal [name=" + name + ", path=" + path + ", redirct=" + redirct + "]";}}action标签模型/*** Action标签模型* @author 20190313**/public class ActionModal {private String path;private String type;private Map<String, ForwardModal> map = new HashMap<>();public void addForwardModal(ForwardModal forwardModal) {//判断当前的name是不是有重复数据,如果没有则添加,有则跳过if(!map.containsKey(forwardModal.getName())) {map.put(forwardModal.getName(), forwardModal);}}public ForwardModal getForwardModal(String key) {return map.get(key);}public String getPath() {return path;}public void setPath(String path) {this.path = path;}}public String getType() {return type;}public void setType(String type) {this.type = type;}@Overridepublic String toString() {return "ActionModal [path=" + path + ", type=" + type + ", map=" + map + "]";}}config标签模型public class ConfigModal {private Map<String, ActionModal> map = new HashMap<>();public void addActionModal(ActionModal actionModal) {if(!map.containsKey(actionModal.getType())) {map.put(actionModal.getType(), actionModal);}}public ActionModal getActionModal(String key) {return map.get(key);}@Overridepublic String toString() {return "ConfigModal [map=" + map + "]";}}将xml解析成java对象的⼯⼚类记住解析的⽅式⼀定是从外往⾥。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

首先实现生成对应的JAVAbean的XML文件方法/*** DMO4J写入XML* @param obj 泛型对象* @param entityPropertys 泛型对象的List集合* @param Encode XML自定义编码类型(推荐使用GBK)* @param XMLPathAndName XML文件的路径及文件名*/publicvoid writeXmlDocument(T obj, List<T> entityPropertys, String Encode,String XMLPathAndName) {long lasting = System.currentTimeMillis();//效率检测try {XMLWriter writer = null;// 声明写XML的对象OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding(Encode);// 设置XML文件的编码格式String filePath = XMLPathAndName;//获得文件地址File file = new File(filePath);//获得文件if (file.exists()) {file.delete();}// 新建student.xml文件并新增内容 Documentdocument = DocumentHelper.createDocument();String rootname =obj.getClass().getSimpleName();//获得类名Element root = document.addElement(rootname + "s");//添加根节点 Field[] properties =obj.getClass().getDeclaredFields();//获得实体类的所有属性for (T t : entityPropertys) { //递归实体 Element secondRoot =root.addElement(rootname); //二级节点for (int i = 0; i < properties.length; i++) {//反射get方法 Method meth =t.getClass().getMethod("get"+properties[i].getName().substring(0, 1).toUpperCase()+properties[i].getName().substring(1));//为二级节点添加属性,属性值为对应属性的值secondRoot.addElement(properties[i].getName()).setText(meth.invoke(t).toString());}}//生成XML文件 writer = new XMLWriter(new FileWriter(file), format);writer.write(document);writer.close();long lasting2 = System.currentTimeMillis();System.out.println("写入XML文件结束,用时"+(lasting2 - lasting)+"ms");} catch (Exception e) {System.out.println("XML文件写入失败");}测试此方法/*** DOM4J读写XML示例** @param args* @throws Exception*/publicstaticvoid main(String[] args) {DOM4JTest<User> d = new DOM4JTest<User>(); User user = new User();User user1 = new User("姓名1", "18", "男"); User user2 = new User("姓名2", "19", "女"); User user3 = new User("石头", "20", "女");List<User> users = new ArrayList<User>(); users.add(user1);users.add(user2);users.add(user3);d.writeXmlDocument(user, users, "GBK", "WebRoot\\WEB-INF\\student.xml");}此时得到的XML文件如下view plaincopy to clipboardprint?<?xml version="1.0" encoding="GBK"?><Users><User><name>姓名1</name><age>18</age><sax>男</sax></User><User><name>姓名2</name><age>19</age><sax>女</sax></User><User><name>石头</name><age>20</age><sax>女</sax></User></Users>实现读取XML文件得到对象集合的方法/**** @param XMLPathAndName XML文件的路径和地址* @param t 泛型对象* @return*/@SuppressWarnings("unchecked")public List<T> readXML(String XMLPathAndName, T t) { long lasting = System.currentTimeMillis();//效率检测List<T> list = new ArrayList<T>();//创建list集合try {File f = new File(XMLPathAndName);//读取文件SAXReader reader = new SAXReader();Document doc = reader.read(f);//dom4j读取Element root = doc.getRootElement();//获得根节点Element foo;//二级节点 Field[] properties =t.getClass().getDeclaredFields();//获得实例的属性//实例的get方法 Method getmeth; //实例的set方法 Method setmeth;for (Iterator i =root.elementIterator(t.getClass().getSimpleName());i.hasNext();) {//遍历t.getClass().getSimpleName()节点foo = (Element) i.next();//下一个二级节点t=(T)t.getClass().newInstance();//获得对象的新的实例for (int j = 0; j < properties.length; j++) {//遍历所有孙子节点//实例的set方法setmeth = t.getClass().getMethod("set"+properties[j].getName().substring(0, 1).toUpperCase()+properties[j].getName().substring(1),properties[j].getTyp e());//properties[j].getType()为set方法入口参数的参数类型(Class类型) setmeth.invoke(t,foo.elementText(properties[j].getName()));//将对应节点的值存入}list.add(t);}} catch (Exception e) {e.printStackTrace();}long lasting2 = System.currentTimeMillis();System.out.println("读取XML文件结束,用时"+(lasting2 - lasting)+"ms");return list;测试:publicstaticvoid main(String[] args) {DOM4JTest<User> d = new DOM4JTest<User>();User user = new User();List<User> list=d.readXML("WebRoot\\WEB-INF\\student.xml",user);System.out.println("XML文件读取结果");for(int i =0;i<list.size();i++){User usename=(User)list.get(i);System.out.println("name"+usename.getName()); System.out.println("age"+usename.getAge());System.out.println("sax"+usename.getSax());}}控制台打印结果:name姓名1age18sax男name姓名2age19sax女name石头age20sax女。

相关文档
最新文档