dom4j创建解析xml
java_Dom4j解析XML详解
学习:Dom4j1、DOM4J简介DOM4J是 出品的一个开源XML 解析包。
DOM4J应用于Java 平台,采用了Java 集合框架并完全支持DOM,SAX 和JAXP。
DOM4J 使用起来非常简单。
只要你了解基本的XML-DOM 模型,就能使用。
Dom:把整个文档作为一个对象。
DOM4J 最大的特色是使用大量的接口。
它的主要接口都在org.dom4j里面定义:接口之间的继承关系如下:interface ng.Cloneableinterface org.dom4j.Nodeinterface org.dom4j.Attributeinterface org.dom4j.Branchinterface org.dom4j.Documentinterface org.dom4j.Elementinterface org.dom4j.CharacterDatainterface org.dom4j.CDATAinterface mentinterface org.dom4j.Textinterface org.dom4j.DocumentTypeinterface org.dom4j.Entityinterface org.dom4j.ProcessingInstruction2、XML文档操作12.1、读取XML文档:读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。
因为利用了相同的接口,它们的调用方式是一样的。
public static Docum ent load(String filenam e) {Document docum ent =null;try {SAXReader saxReader = new SAXReader();docum ent =saxReader.read(new File(filename)); //读取XML文件,获得docum ent 对象} catch (Exception ex) {ex.printStackTrace();}return docum ent;}或public static Docum ent load(URL url) {Document docum ent =null;try {SAXReader saxReader = new SAXReader();docum ent =saxReader.read(url); //读取XML文件,获得docum ent对象} catch (Exception ex) {ex.printStackTrace();}return docum ent;}//读取指定的xml文件之后返回一个Document对象,这个对象代表了整个XML文档,用于各种Do m运算。
dom4j解析XML
dom4j解析XML ⼀、嵌套多层<?xml version="1.0" encoding="UTF-8"?><jstmbsinterface><result code="0" description="" serverdatetime="2016-07-12 09:51:26"></result> <data encryptflag="0" encryptkey=""><Ships count="3" batchnum="1" totalbatch="1"> <Ship><IsCJStandard>0</IsCJStandard><ShipTypeName>24234</ShipTypeName><InspectDate>2014-3-20 0:00:00</InspectDate><Comments><![CDATA[]]></Comments><ShipTeuOne>0.00</ShipTeuOne><LoadTonOne>43.00</LoadTonOne><HostNumOne>1</HostNumOne><SafeManageNum></SafeManageNum><InitialRegNo>4243</InitialRegNo><ShipIdNo></ShipIdNo><ShipIdNoDate></ShipIdNoDate><StockProportion>54.00</StockProportion><EntLicenseNo></EntLicenseNo><ShipId>301003221008213841</ShipId><CancelTime></CancelTime><ValidDate>2015-3-20 0:00:00</ValidDate><RegCertNum>2342342</RegCertNum><TotalLength></TotalLength><ShipName>966</ShipName><ArchiveNum>01319</ArchiveNum><ShipEnName></ShipEnName><ShipSurveyNum>2003Q2106441</ShipSurveyNum><ShipRegNum>270510000022</ShipRegNum><ShipType>0203</ShipType><TransType>2</TransType><Runner>运输有限公司</Runner><BeforeName></BeforeName><NationCertNum>270510000022</NationCertNum><LeaseCretNum></LeaseCretNum><TempNationCertNum>41234</TempNationCertNum><ChargeShipType>0</ChargeShipType><Manager></Manager><ShipOwner>缺1</ShipOwner><Material>01</Material><BuildDate>2003-12-10 0:00:00</BuildDate><ManagerLicenseNum>交长苏XK1726</ManagerLicenseNum><ShipValue>0.00</ShipValue><RebuildDate></RebuildDate><ShipPort>⽆锡</ShipPort><ShipPortCode>3225</ShipPortCode><ShipNationality></ShipNationality><BuildCompany>造船⼚</BuildCompany><GrossTon>97.00</GrossTon><NetTon>54.00</NetTon><BuildSite>000</BuildSite><Draft>0.00</Draft><LoadTon>150.00</LoadTon><ShipTeu></ShipTeu><GoodsArea></GoodsArea><Vehicles>0</Vehicles><Passengers>0</Passengers><RatingSpeed>0.00</RatingSpeed><HostNum>1</HostNum><MainFrame>134.00</MainFrame><IsStandard>1</IsStandard><ShipLength>28.60</ShipLength><ShipTypeWidth>6.18</ShipTypeWidth><ShipTypeDepth>2.00</ShipTypeDepth><IsSailingJh>1</IsSailingJh><TranLicenseNum>0159</TranLicenseNum><VerifyCode>53822</VerifyCode><LicenseFirstDate>2012-04-16 00:00:00</LicenseFirstDate><LicenseStartDate>2015-08-28 00:00:00</LicenseStartDate><LicenseEndDate>2018-08-27 00:00:00</LicenseEndDate><LicenseIssueDate>2015-8-28 16:47:52</LicenseIssueDate><IssueOrgName>运输管理局</IssueOrgName><OrgId>6872b6ce14b042da8127ba6fde4ddb97</OrgId><OwnerId>300704281011306626</OwnerId><BusiScopeNames>普通货船运输</BusiScopeNames><BusiScopeName>普通货船运输</BusiScopeName><BusiScopeCodes>010*******</BusiScopeCodes><CertState>1</CertState><OperState>10</OperState><CaptainName></CaptainName><ShipWidth>6.18</ShipWidth><ShipHeight>2.00</ShipHeight><TotalLoadTon></TotalLoadTon><IsInlRiverStandard>0</IsInlRiverStandard></Ship><Ship><IsCJStandard>0</IsCJStandard><ShipTypeName>341</ShipTypeName><InspectDate></InspectDate><Comments><![CDATA[]]></Comments><ShipTeuOne>0.00</ShipTeuOne><LoadTonOne>122.00</LoadTonOne><HostNumOne>2</HostNumOne><SafeManageNum></SafeManageNum><InitialRegNo>1111</InitialRegNo><ShipIdNo>231312</ShipIdNo><ShipIdNoDate>2015-8-28 0:00:00</ShipIdNoDate><StockProportion>54.00</StockProportion><EntLicenseNo></EntLicenseNo><ShipId>300302191055102943</ShipId><CancelTime></CancelTime><ValidDate></ValidDate><RegCertNum>21111</RegCertNum><TotalLength></TotalLength><ShipName>太湖</ShipName><ArchiveNum>08028</ArchiveNum><ShipEnName></ShipEnName><ShipSurveyNum>211155364273</ShipSurveyNum><ShipRegNum>2123</ShipRegNum><ShipType>0101</ShipType><TransType>1</TransType><Runner>游游船公司</Runner><BeforeName></BeforeName><NationCertNum>2123</NationCertNum><LeaseCretNum>1111</LeaseCretNum><TempNationCertNum>22222</TempNationCertNum><ChargeShipType>0</ChargeShipType><Manager></Manager><ShipOwner>缺</ShipOwner><Material>01</Material><BuildDate>1980-4-1 0:00:00</BuildDate><ManagerLicenseNum>K0745号</ManagerLicenseNum><ShipValue>0.00</ShipValue><RebuildDate>2015-8-28 0:00:00</RebuildDate><ShipPort>⽆锡</ShipPort><ShipPortCode>3225</ShipPortCode><ShipNationality></ShipNationality><BuildCompany>船⼚</BuildCompany><GrossTon>153.00</GrossTon><NetTon>31.00</NetTon><BuildSite>FJKAK</BuildSite><Draft>3.00</Draft><LoadTon>0.00</LoadTon><ShipTeu></ShipTeu><GoodsArea>0.00</GoodsArea><Vehicles>0</Vehicles><Passengers>130</Passengers><RatingSpeed>0.00</RatingSpeed><HostNum>2</HostNum><MainFrame>182.20</MainFrame><IsStandard>0</IsStandard><ShipLength>0.00</ShipLength><ShipTypeWidth>0.00</ShipTypeWidth><ShipTypeDepth>0.00</ShipTypeDepth><IsSailingJh>0</IsSailingJh><TranLicenseNum>0208003</TranLicenseNum><VerifyCode>43407</VerifyCode><LicenseFirstDate>2011-03-17 00:00:00</LicenseFirstDate> <LicenseStartDate>2015-08-28 00:00:00</LicenseStartDate> <LicenseEndDate>2018-08-27 00:00:00</LicenseEndDate> <LicenseIssueDate>2015-8-28 0:00:00</LicenseIssueDate> <IssueOrgName>运输管理局</IssueOrgName><OrgId>6872b6ce14b042da8127ba6fde4ddb97</OrgId><OwnerId>300209280855043295</OwnerId><BusiScopeNames>旅游运输</BusiScopeNames><BusiScopeName>通客船运输</BusiScopeName><BusiScopeCodes>0302030101</BusiScopeCodes><AreaCode>320100</AreaCode><CertState>1</CertState><CaptainName></CaptainName><ShipWidth>0.00</ShipWidth><ShipHeight>0.00</ShipHeight><TotalLoadTon></TotalLoadTon><IsInlRiverStandard>0</IsInlRiverStandard></Ship><Ship><IsCJStandard>0</IsCJStandard><ShipTypeName>集装箱船</ShipTypeName><InspectDate>2013-6-27 8:55:59</InspectDate><Comments><![CDATA[]]></Comments><ShipTeuOne>50.00</ShipTeuOne><LoadTonOne>1078.00</LoadTonOne><HostNumOne>2</HostNumOne><SafeManageNum></SafeManageNum><InitialRegNo>12</InitialRegNo><ShipIdNo></ShipIdNo><ShipIdNoDate></ShipIdNoDate><StockProportion>100.00</StockProportion><EntLicenseNo></EntLicenseNo><ShipId>301211050949527795</ShipId><CancelTime></CancelTime><ValidDate>2012-6-27 0:00:00</ValidDate><RegCertNum>123</RegCertNum><TotalLength></TotalLength><ShipName>6号</ShipName><ArchiveNum>01413</ArchiveNum><ShipEnName></ShipEnName><ShipSurveyNum>2012J2102836</ShipSurveyNum><ShipRegNum>270512000146</ShipRegNum><ShipType>0205</ShipType><TransType>2</TransType><Runner>限公司</Runner><BeforeName></BeforeName><NationCertNum>270512000146</NationCertNum><LeaseCretNum></LeaseCretNum><TempNationCertNum>123</TempNationCertNum><ChargeShipType>0</ChargeShipType><Manager></Manager><ShipOwner>缺</ShipOwner><Material>01</Material><BuildDate>2012-8-18 0:00:00</BuildDate><ManagerLicenseNum>2182</ManagerLicenseNum><ShipValue>0.00</ShipValue><RebuildDate></RebuildDate><ShipPort>jj锡</ShipPort><ShipPortCode>3225</ShipPortCode><ShipNationality></ShipNationality><BuildCompany>2312修造⼚</BuildCompany><GrossTon>734.00</GrossTon><NetTon>477.00</NetTon><BuildSite>江1561</BuildSite><Draft>0.00</Draft><LoadTon>1078.00</LoadTon><ShipTeu>50.00</ShipTeu><GoodsArea>1078.00</GoodsArea><Vehicles>50</Vehicles><Passengers>0</Passengers><RatingSpeed>0.00</RatingSpeed><HostNum>2</HostNum><MainFrame>280.00</MainFrame><IsStandard>0</IsStandard><ShipLength>48.14</ShipLength><ShipTypeWidth>12.50</ShipTypeWidth><ShipTypeDepth>3.15</ShipTypeDepth><IsSailingJh>0</IsSailingJh><TranLicenseNum>12)0200166</TranLicenseNum><VerifyCode>63933</VerifyCode><LicenseFirstDate>2012-11-05 00:00:00</LicenseFirstDate> <LicenseStartDate>2014-10-14 00:00:00</LicenseStartDate> <LicenseEndDate>2014-10-31 00:00:00</LicenseEndDate> <LicenseIssueDate>2014-10-14 0:00:00</LicenseIssueDate> <IssueOrgName>033运输管理处</IssueOrgName><OrgId>6872b6ce14b042da8127ba6fde4ddb97</OrgId><OwnerId>301006171506256528</OwnerId><BusiScopeNames>156146货船运输</BusiScopeNames> <BusiScopeName>0213023通货船运输</BusiScopeName> <BusiScopeCodes>010*******</BusiScopeCodes><AreaCode>320200</AreaCode><CertState>1</CertState><OperState>10</OperState><CaptainName></CaptainName><ShipHeight>3.15</ShipHeight><TotalLoadTon></TotalLoadTon><IsInlRiverStandard>0</IsInlRiverStandard></Ship></Ships></data></jstmbsinterface>解析⽅式:import java.io.File;import .MalformedURLException;import .URL;import java.text.SimpleDateFormat;import java.util.*;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class AllpagesParse extends Model<AllpagesParse> {static String ShipName;static String ShipEnName;static String ShipIdNo;static String Runner;static String EntLicenseNo;static String ShipOwner;static String BuildDate;static String ShipPort;static String GrossTon;static String NetTon;static String Draft;static String LoadTonOne;static String ShipTeuOne;static String Passengers;static String RatingSpeed;static String HostNumOne;static String MainFrame;static String TotalLength;static String ShipLength;static String ShipWidth;static String ShipTypeDepth;static String TransType;static String TranLicenseNum;static String LicenseStartDate;static String LicenseEndDate;static String IssueOrgName;static String BusiScopeName;static String CertState;static String ShipType;public static String updatetime;public static String batchnum ;public static String totalbatch;public static String fStr;public static void parseXML(String respXML) throws DocumentException, MalformedURLException{ SAXReader reader = new SAXReader();fStr = respXML.replaceAll(" ", "");Document doc = DocumentHelper.parseText(fStr);Element root=doc.getRootElement();//获取根节点@SuppressWarnings("rawtypes")List list = root.elements("data");List listresult = root.elements("result");for(Object objresult:listresult){Element result = (Element) objresult;updatetime = result.attributeValue("serverdatetime");}for (Object obj: list) {Element shipElement = (Element) obj;parseShipElement(shipElement);}}private static void parseShipElement(Element shipElement) {@SuppressWarnings("rawtypes")List list = shipElement.elements();for (Object obj: list) {Element Ships = (Element) obj;String key = Ships.getName();batchnum = Ships.attributeValue("batchnum");System.out.println("\n"+"Ships_totalbatch:"+totalbatch+"\n"); //总页数String value = Ships.getTextTrim();@SuppressWarnings("rawtypes")java.util.Iterator Ship = Ships.elementIterator("Ship");while(Ship.hasNext()){Element tableItem = (Element) Ship.next();ShipName = tableItem.elementTextTrim("ShipName");BuildDate = tableItem.elementTextTrim("BuildDate");CertState = tableItem.elementTextTrim("CertState"); //1:有效 2:注销 ShipPort = tableItem.elementTextTrim("ShipPort");Draft = tableItem.elementTextTrim("Draft");RatingSpeed = tableItem.elementTextTrim("RatingSpeed");ShipLength = tableItem.elementTextTrim("ShipLength");ShipWidth = tableItem.elementTextTrim("ShipWidth");TransType = tableItem.elementTextTrim("TransType");TranLicenseNum = tableItem.elementTextTrim("TranLicenseNum");LicenseStartDate = tableItem.elementTextTrim("LicenseStartDate");LicenseEndDate = tableItem.elementTextTrim("LicenseEndDate");IssueOrgName = tableItem.elementTextTrim("IssueOrgName");ShipEnName = tableItem.elementTextTrim("ShipEnName");ShipIdNo = tableItem.elementTextTrim("ShipIdNo");Runner = tableItem.elementTextTrim("Runner");EntLicenseNo = tableItem.elementTextTrim("EntLicenseNo");ShipOwner = tableItem.elementTextTrim("ShipOwner");GrossTon = tableItem.elementTextTrim("GrossTon");NetTon = tableItem.elementTextTrim("NetTon");LoadTonOne = tableItem.elementTextTrim("LoadTonOne");ShipTeuOne = tableItem.elementTextTrim("ShipTeuOne");Passengers = tableItem.elementTextTrim("Passengers");HostNumOne = tableItem.elementTextTrim("HostNumOne");MainFrame = tableItem.elementTextTrim("MainFrame");TotalLength = tableItem.elementTextTrim("TotalLength");ShipTypeDepth = tableItem.elementTextTrim("ShipTypeDepth");BusiScopeName = tableItem.elementTextTrim("BusiScopeName");ShipType= tableItem.elementTextTrim("ShipType");}}}⼆、嵌套⼀层<?xml version="1.0" encoding="UTF-8"?><response id=”1” cmd=”clone”><src_host_name>192.168.4.205</src_host_name><src_physics_host_name>192.168.4.206</src_physics_host_name><result>1</result><error_code>100</error_code></response>解析⽅式:String dataGot = "xml";Document doc = DocumentHelper.parseText(dataGot);Element root=doc.getRootElement();//获取根节点String host_name = root.elementTextTrim("src_host_name");String result = root.elementTextTrim("result");String error_code = root.elementTextTrim("error_code");三、嵌套两层<?xml version="1.0" encoding="UTF-8" ?><Response><MO><Mobile>16357164589</Mobile><Message>哈哈哈哈哈哈哈哈哈哈哈</Message><ReceiveTime>2012-01-12 15:23:12</ReceiveTime><ExtendCode>扩展号</ExtendCode><MsgID>1100</MsgID></MO><MO><Mobile>159********</Mobile><Message>我了</Message><ReceiveTime>2012-01-12 15:23:12</ReceiveTime><ExtendCode>扩展号</ExtendCode><MsgID>1101</MsgID></MO></Response>解析⽅式:Element Response = doc.getRootElement();Iterator<?> Report = Response.elementIterator("MO");while (Report.hasNext()) {Element tableItem = (Element) Report.next();// String msgID = tableItem.elementTextTrim("MsgID");String mobile = tableItem.elementTextTrim("Mobile");String message = tableItem.elementTextTrim("Message");String receiveTime = tableItem.elementTextTrim("ReceiveTime");("SmsReply>>>>>>>>>>mobile:" + mobile + ",message:" + message+",receiveTime:"+receiveTime); }。
使用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);}}}}}}。
dom4J解析xml
dom4J解析xmldom4j需要引⼊的pom<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><version>1.1.6</version></dependency>解析代码⽰例:package com.bjgoodwill.oip.core.config;import org.dom4j.Attribute;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;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.core.io.ClassPathResource;import org.xml.sax.EntityResolver;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.StringBufferInputStream;/*** Description:多数据源xml切换*/public class DataSourceXMLChange {private final static Logger logger = LoggerFactory.getLogger(DataSourceXMLChange.class);/*** @Description:写⼊xml* @ isCheck true 为选中此xml,得去掉后缀的.hosp_bak_DB 、false为弃⽤此xml 得加上.hosp_bak_DB*/public static void updateXML(ClassPathResource classPathResource, boolean isCheck) throws IOException, DocumentException { File classPathResourceFile = classPathResource.getFile();SAXReader saxreader = new SAXReader();// 不验证xml的DTD,验证需要联⽹,否则验证会失败报错saxreader.setEntityResolver(new EntityResolver() {@Overridepublic InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {return new InputSource(new StringBufferInputStream(""));}});Document document = saxreader.read(classPathResourceFile);Element element = (Element) document.selectSingleNode("/mapper");Attribute attribute = element.attribute("namespace");String namespace = attribute.getText();if (isCheck) {if(namespace.contains(".hosp_bak_DB")){namespace=namespace.substring(0,namespace.length()-12);attribute.setText(namespace);saveDocument(document, classPathResourceFile);}}else {if(!namespace.contains(".hosp_bak_DB")){namespace=namespace+".hosp_bak_DB";attribute.setText(namespace);saveDocument(document, classPathResourceFile);}}}/*** @Description:保存xml*/private static void saveDocument(Document document,File xmlFile) {XMLWriter writer = null;try {if (xmlFile.exists()){xmlFile.delete();}writer = new XMLWriter(new FileOutputStream(xmlFile), OutputFormat.createPrettyPrint());writer.write(document);writer.close();} catch (Exception e) {logger.error(xmlFile.getName()+":xml写⼊异常",e);} finally {if (writer != null)try {writer.close();} catch (IOException e) {logger.error(xmlFile.getName()+"流关闭异常",e);}}}}调⽤时,如切换不同数据源时加载不同语法对应的mybatis的xml,需要标记⼀个xml在正式运⾏时为⽆效状态,可以⽤如下代码:package com.bjgoodwill.oip.core.config;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.tomcat.jdbc.pool.PoolConfiguration;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration@MapperScan(basePackages = {"mon.dao.mydb"}, sqlSessionTemplateRef = "viewSqlSessionTemplate")public class DataSourceViewConfig {@Bean(name = "viewDataSource")@ConfigurationProperties(prefix = "spring.datasource.view")public DataSource testDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "viewSqlSessionFactory")public SqlSessionFactory testSqlSessionFactory(@Qualifier("viewDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);//加载对应数据源xmlorg.apache.tomcat.jdbc.pool.DataSource tomcatDataSource = (org.apache.tomcat.jdbc.pool.DataSource) dataSource;PoolConfiguration poolProperties = tomcatDataSource.getPoolProperties();String driverClassName = poolProperties.getDriverClassName();if (driverClassName.equals("com.mysql.jdbc.Driver")) {DataSourceXMLChange.updateXML(new ClassPathResource("com/common/dao/mapper/MapperSqlServer.xml"),false);DataSourceXMLChange.updateXML(new ClassPathResource("com/common/dao/mapper/MapperMysql.xml"),true);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/common/dao/mapper/MapperMysql.xml"));} else if (driverClassName.equals("com.microsoft.sqlserver.jdbc.SQLServerDriver")) {DataSourceXMLChange.updateXML(new ClassPathResource("com/common/dao/mapper/MapperSqlServer.xml"),true);DataSourceXMLChange.updateXML(new ClassPathResource("com/common/dao/mapper/MapperMysql.xml"),false);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/common/dao/mapper/MapperSqlServer.xml")); }bean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));return bean.getObject();}@Bean(name = "viewTransactionManager")public DataSourceTransactionManager testTransactionManager(@Qualifier("viewDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "viewSqlSessionTemplate")public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("viewSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory);}}对应的多数据配置如下:spring:datasource:view:name: mssql_inpatientdriver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriverurl: jdbc:sqlserver://192.168.188.188:1433;DatabaseName=dbusername: rootpassword: root# 使⽤druid数据源 Begin ##################################################type: com.alibaba.druid.pool.DruidDataSourceinitialSize: 5minIdle: 10maxActive: 20# 配置获取连接等待超时的时间maxWait: 60000# 配置间隔多久才进⾏⼀次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置⼀个连接在池中最⼩⽣存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1testWhileIdle: truetestOnBorrow: falsetestOnReturn: false# 配置监控统计拦截的filters,去掉后监控界⾯sql⽆法统计,'wall'⽤于防⽕墙filters: stat,wall,log4jlogSlowSql: true# 使⽤druid数据源 End ######################################################注意使⽤时如果环境是内⽹环境,⽆法联通外⽹,或者断⽹环境下,那么在使⽤dom4j解析xml时,如果xml⽂件头有dtd验证,默认会按给的url进⾏联⽹下载进⾏验证,如果⽹络不通,那么就会报错,所以才会有上⾯的去掉联⽹验证功能参考:。
dom4j如何解析XML文件
dom4j如何解析XML⽂件最近在⼀些对xml⽂件的操作,下⾯简单写⼀个dom4j解析xml⽂件并将其封装到⼀个javabean中的例⼦,只是具有针对性的,不是通⽤的,仅供参考哦~~⾸先说:dom4j是⼀个java的XML api,性能优异、功能强⼤、易于使⽤。
使⽤dom4j对xml⽂件进⾏解析,并完成对⽂件的封装。
接下来,主要使⽤到的是dom4j中的SAXReader类,在这⾥我的流程是传⼊⼀个xml⽂件,调⽤写好的的⼯具类,完成对xml⽂件的解析。
xml⽂件如下:1<?xml version="1.0" encoding="UTF-8"?>23<school>45<college name="数学">6<class name="1612A" classroom="36306">7<student>8<property name="name" value="张三"></property>9<property name="age" value="23"></property>10<property name="garden" value="男"></property>11</student>12<student>13<property name="name" value="李四"></property>14<property name="age" value="22"></property>15<property name="garden" value="⼥"></property>16</student>17<student>18<property name="name" value="王五"></property>19<property name="age" value="24"></property>20<property name="garden" value="男"></property>21</student>22</class>23</college>2425<college name="英语">26<class name="1612C" classroom="35108">27<student>28<property name="name" value="赵六"></property>29<property name="age" value="21"></property>30<property name="garden" value="男"></property>31</student>32<student>33<property name="name" value="陈七"></property>34<property name="age" value="22"></property>35<property name="garden" value="男"></property>36</student>37<student>38<property name="name" value="郭⼋"></property>39<property name="age" value="25"></property>40<property name="garden" value="男"></property>41</student>42<student>43<property name="name" value="孙九"></property>44<property name="age" value="20"></property>45<property name="garden" value="⼥"></property>46</student>47</class>48</college>4950</school>Junit 测试如下:1public class Dom4jTest {23 @Test4public void test() throws Exception{567 File xmlFile = new File("⽂件位置");8// 调⽤⼯具类返回学⽣集合9 List<Student> studentList = XMLUtil.fileTransferList(xmlFile);1011for (Student student : studentList) {1213 System.out.println("-------------------------");14 System.out.println("姓名:"+student.getName());15 System.out.println("年龄:"+student.getAge());16 System.out.println("性别:"+student.getGarden());1718 }1920 }2122 }⼯具类如下:1public class XMLUtil {23public static List<Student> fileTransferList(File file) throws DocumentException{45// 返回值:学⽣信息集合6 List<Student> studentList=new ArrayList<Student>();78// 创建saxReader对象9 SAXReader reader = new SAXReader();1011// 通过read⽅法读取⼀个⽂件转换成Document对象12 Document document = reader.read(file);1314//获取根节点元素对象15 Element root = document.getRootElement();1617// 获取学院节点集合18 List<Element> collegeElements = root.elements();1920//已知属性名情况下21for (Element college : collegeElements) {2223 List<Student> collegeStudentList = getStudentListFromCollegeElement(college);2425 studentList.addAll(collegeStudentList);26 }2728return studentList;29 }3031private static List<Student> getStudentListFromCollegeElement(Element collegeElement){3233// 返回值:学⽣信息集合34 List<Student> studentList = new ArrayList<Student>();3536 List<Element> classElements = collegeElement.elements();3738for (Element classElement : classElements) {3940 List<Student> classStudentList = getStudentListFromClassElement(classElement);4142 studentList.addAll(classStudentList);43 }4445return studentList;4647 }4849private static List<Student> getStudentListFromClassElement(Element classElement){5051// 返回值:学⽣信息集合52 List<Student> studentList = new ArrayList<Student>();5354 List<Element> studentElements = classElement.elements();5556for (Element student : studentElements) {5758 List<Element> propertyElements = student.elements();5960 Student student2 = studentElementTransferStudentEntity(propertyElements);6162 studentList.add(student2);63 }6465return studentList;66 }6768private static Student studentElementTransferStudentEntity(List<Element> propertyElements){ 6970 Student stu = new Student();7172for (Element property : propertyElements) {7374 String name = property.attributeValue("name");75 String value = property.attributeValue("value");7677if("name".equals(name)){78 stu.setName(value);79 }80if("age".equals(name)){81 stu.setAge(value);82 }83if("garden".equals(name)){84 stu.setGarden(value);85 }86 }8788return stu;89 }9091 }最后呢,当然是显⽰结果了~~结果如下:到此结束了,以后也许有有其他解析的⽅法,也希望各位同道⼀块学习~~。
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 dom4j 解析
java dom4j 解析DOM4J是一个用于处理XML文档的开源Java库,提供了一种基于树形结构的XML文档处理方式。
通过DOM4J库,我们可以方便地读取、修改和生成XML 文档。
在Java中,使用DOM4J解析XML文档通常需要以下步骤:1. 导入DOM4J库:首先需要将DOM4J库导入到项目中,可以通过Maven或手动下载jar包的方式导入。
2. 创建Document对象:在DOM4J中,XML文档的顶层结构是Document对象,我们需要先创建一个Document对象来表示整个XML文档。
3. 读取XML文档:通过DOM4J提供的SAXReader类,我们可以读取XML 文档并将其解析为Document对象。
可以使用SAXReader的read方法来读取XML 文档。
4. 获取根节点:通过Document对象的getRootElement方法可以获取XML文档的根节点,从而可以通过根节点逐级遍历XML文档的结构。
5. 遍历XML文档:可以通过递归遍历XML文档的节点,获取节点的名称、属性、文本内容等信息。
可以使用Element对象的elements方法获取子节点,使用attributeValue方法获取节点属性的值,使用getText方法获取节点的文本内容。
6. 修改XML文档:通过DOM4J可以方便地修改XML文档的内容,包括添加节点、修改节点属性、修改节点文本内容等操作。
可以使用Element对象的addElement方法添加子节点,setAttributeValue方法修改节点属性的值,setText方法修改节点的文本内容。
7. 生成XML文档:通过DOM4J可以将Document对象生成为XML文档,可以通过OutputFormat类设置XML文档的格式,通过XMLWriter类将Document对象输出为XML文档。
总的来说,使用DOM4J解析XML文档可以方便地读取、修改和生成XML文档,提供了一种便捷的XML文档处理方式。
dom4j解析xml文件
dom4j解析xml⽂件⼀、利⽤dom4j创建⼀个内容如下的xml⽂件SqlMapConfig.xml1<?xml version="1.0" encoding="UTF-8" ?>2<!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN"3 "ibatis-3-config.dtd">4<configuration>5<environments default="development">6<environment id="MySQL">7<transactionManager type="JDBC">123</transactionManager>8<dataSource type="POOLED">9<property name="driver" value="com.mysql.jdbc.Driver"/>10<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>11<property name="username" value="root"/>12<property name="password" value="admin"/>13</dataSource>14</environment>15</environments>1617<mappers>18<mapper resource="com/pojo/sql/DepMap.xml"/>19<mapper resource="com/pojo/sql/EmpMap.xml"/>20</mappers>21</configuration>步骤:1.创建⼀个输出流,指定创建的SqlMapConfig.xml⽂件的位置-------OutputStreamOutputStream os = new FileOutputStream("d:/SqlMapConfig.xml");2.创建⼀个xml编写器-------XMLWriterXMLWriter writer = new XMLWriter(os,OutputFormat.createPrettyPrint());这⾥os是前⾯新建的⼀个输出流,OutputFormat.createPrettyPrint()是指定输出的格式的,这⾥代表内容缩进。
dom4j解析XML的基本用法
dom4j解析XML的基本用法dom4j解析XML的基本用法1. 需要的包:dom4j-1.4/dom4j.jar2. 用到的类:import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.XMLWriter;import org.dom4j.DocumentException;import org.dom4j.io.SAXReader;3. 基本操作:创建文档:Document document = DocumentHelper.createDocument();创建根节点:Element catalogElement = document.addElement("catalog");添加注释: catalogElement.addComment("注释");处理指令:catalogElement.addProcessingInstruction("target","text");增加子节点:Element journalElement = catalogElement.addElement("journal");给节点添加属性:journalElement.addAttribute("title", "值");设置节点中的文本:journalElement.setText("值");添加文档类型:document.addDocType("catalog", null,"file://c:/Dtds/catalog.dtd ");创建 xml 文件:XMLWriter output = new XMLWriter(new FileWriter( new File("c:/catalog/catalog.xml") ));output.write( document );output.close();加载 xml 文件:SAXReader saxReader = new SAXReader(); //SAXReader 包含在 org.dom4j.io 包中。
DOM4J详细教程
DOM4J详细教程
答:
DOM4J是一个Java XML API,它可以用来快速、高效地读取、生成和
修改XML数据。
它支持XPath的完整实现,支持Java5的新功能,并有一
个强大的可扩展的SAX集成,还支持JAXP 1.3、通过支持性能良好的DOM、SAX以及JAXP的结合,它可以提供XML文档的可用性。
1.使用DOM4J
使用DOM4J解析XML文档的主要步骤如下:
(1)创建一个Document对象,该文档对象将描述整个XML文档。
(2)创建一个XMLReader对象,该对象使用DOM4J的API来解析
XML文档。
(3)创建一个DocumentHandler对象,该对象用来处理XML文档内容,如处理XML文档的根元素和子元素等。
(4)使用XMLReader的parse方法来将Document对象与DocumentHandler对象相关联,以便允许访问Document对象的内容。
(5)执行任何必要的处理来解析XML文档中的元素。
2.DOM4J技术
(1)XML读取
DOM4J提供了一组API,可以在处理XML文档时使用。
DOM4J的
org.dom4j.io.XMLReader类可以解析XML文档,将其转换为DOM4J的
Document对象。
它可以使用InputSource或java.io.Reader对象的任何对象,以确保可以将XML文档从字符串、文件或URL读取。
(2)XML写入
(3)XPath查询。
javadom4j解析xml实例
javadom4j解析xml实例1.要解析的xml⽂件data.xml:<?xml version="1.0" encoding="UTF-8"?><ReturnInfo><userlist><item index="1" level="60" nickname="凄惨的⽼⽣" country="⾦"weiwang="136929" /><item index="2" level="85" nickname="哭泣的⾄尊宝" country="⾦"weiwang="97490" /><item index="3" level="85" nickname="⽼公" country="⾦"weiwang="91103" /><item index="4" level="78" nickname="冉闵" country="⾦"weiwang="82828" /><item index="5" level="55" nickname="erggh" country="⾦"weiwang="77440" /><item index="6" level="60" nickname="孤峰" country="⾦"weiwang="67821" /><item index="7" level="60" nickname="乱世" country="⾦"weiwang="67675" /><item index="8" level="62" nickname="叛逆之神" country="⾦"weiwang="61839" /><item index="9" level="60" nickname="双乔主⼈" country="⾦"weiwang="61647" /><item index="10" level="60" nickname="视觉效果" country="⾦"weiwang="50200" /><item index="11" level="60" nickname="⿁⿁" country="⾦"weiwang="49537" /><item index="12" level="59" nickname="狂龙在天" country="⾦"weiwang="46687" /><item index="13" level="60" nickname="⼩⼦" country="⾦"weiwang="46152" /><item index="14" level="52" nickname="zzy" country="⾦"weiwang="39017" /><item index="15" level="53" nickname="ycf" country="⾦"weiwang="30333" /><item index="16" level="52" nickname="⽆界之魂" country="⾦"weiwang="20294" /><item index="17" level="42" nickname="⼑锋狼" country="⾦"weiwang="18842" /><item index="18" level="60" nickname="mnbvc" country="⾦"weiwang="18102" /><item index="19" level="41" nickname="赢政" country="⾦"weiwang="16331" /><item index="20" level="52" nickname="徐匡胤" country="⾦"weiwang="16156" /></userlist></ReturnInfo>2、具体解析程序如下:package demo4;import java.io.File;import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class TestJava {public static void main(String args[]) throws DocumentException {SAXReader reader = new SAXReader();Document document = reader.read(new File("D:/data.xml"));Element rootElm = document.getRootElement();Element root1Elm = rootElm.element("userlist");List nodes = root1Elm.elements("item");for (Iterator it = nodes.iterator(); it.hasNext();) {Element elm = (Element) it.next();System.out.println("index:" + elm.attributeValue("index")+ " level:" + elm.attributeValue("level") + " nickname:"+ elm.attributeValue("nickname") + " country:"+ elm.attributeValue("country") + " weiwang:"+ elm.attributeValue("weiwang"));}try {Document doc = reader.read(new File("D:/data.xml"));List projects = doc.selectNodes("ReturnInfo/userlist/item");Iterator it = projects.iterator();while (it.hasNext()) {Element elm = (Element) it.next();System.out.println("index:" + elm.attributeValue("index")+ " level:" + elm.attributeValue("level")+ " nickname:" + elm.attributeValue("nickname")+ " country:" + elm.attributeValue("country")+ " weiwang:" + elm.attributeValue("weiwang"));}} catch (Exception ex) {ex.printStackTrace();}}}3、运⾏结果如下图所⽰:<1>、jaxen-1.1-beta-7.jar架包导⼊后不报异常,正常得到结果:<2>、jaxen-1.1-beta-7.jar架包不导⼊后报异常,但也能得到结果:。
(转)Android创建与解析XML——Dom4j方式.
(转)Android创建与解析XML——Dom4j⽅式.1、Dom4j概述dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.dom4j官⽅⽹址:dom4j源码下载:本⽰例中,需要导⼊dom4j.jar包,才能引⽤dom4j相关类,dom4j源码和jar包,请见本⽰例【源码下载】或访问org.dom4j包,不仅包含创建xml的构建器类DocumentHelper、Element,⽽且还包含解析xml的解析器SAXReader、Element,包含类如下:org.dom4jorg.dom4j.DocumentHelper;org.dom4j.Element;org.dom4j.io.SAXReader;org.dom4j.io.XMLWriter;org.dom4j.DocumentException;创建和解析xml的效果图:2、Dom4j 创建 XMLDom4j,创建xml主要⽤到了org.dom4j.DocumentHelper、org.dom4j.Document、org.dom4j.io.OutputFormat、org.dom4j.io.XMLWriter ⾸先,DocumentHelper.createDocument(),创建 org.dom4j.Document 的实例 doc接着,通过doc,设置xml属性doc.setXMLEncoding("utf-8")、doc.addElement("root")根节点,以及⼦节点等然后,定义xml格式并输出,new XMLWriter(xmlWriter, outputFormat)Code/** Dom4j⽅式,创建 XML */public String dom4jXMLCreate(){StringWriter xmlWriter = new StringWriter();Person []persons = new Person[3]; // 创建节点Person对象persons[0] = new Person(1, "sunboy_2050", "/sunboy_2050");persons[1] = new Person(2, "baidu", "");persons[2] = new Person(3, "google", "");try {org.dom4j.Document doc = DocumentHelper.createDocument();doc.setXMLEncoding("utf-8");org.dom4j.Element eleRoot = doc.addElement("root");eleRoot.addAttribute("author", "homer");eleRoot.addAttribute("date", "2012-04-25");eleRoot.addComment("dom4j test");int personsLen = persons.length;for(int i=0; i<personsLen; i++){Element elePerson = eleRoot.addElement("person"); // 创建person节点,引⽤类为 org.dom4j.ElementElement eleId = elePerson.addElement("id");eleId.addText(persons[i].getId()+"");Element eleName = elePerson.addElement("name");eleName.addText(persons[i].getName());Element eleBlog = elePerson.addElement("blog");eleBlog.addText(persons[i].getBlog());}org.dom4j.io.OutputFormat outputFormat = new org.dom4j.io.OutputFormat(); // 设置xml输出格式outputFormat.setEncoding("utf-8");outputFormat.setIndent(false);outputFormat.setNewlines(true);outputFormat.setTrimText(true);org.dom4j.io.XMLWriter output = new XMLWriter(xmlWriter, outputFormat); // 保存xmloutput.write(doc);output.close();} catch (Exception e) {e.printStackTrace();}savedXML(fileName, xmlWriter.toString());return xmlWriter.toString();}运⾏结果:3、Dom4j 解析 XMLDom4j,解析xml主要⽤到了org.dom4j.io.SAXReader、org.dom4j.Document、doc.getRootElement(),以及ele.getName()、ele.getText()等⾸先,创建SAXReader的实例reader,读⼊xml字节流 reader.read(is)接着,通过doc.getRootElement()得到root根节点,利⽤迭代器取得root下⼀级的⼦节点eleRoot.elementIterator()等然后,得到解析的xml内容xmlWriter.append(xmlHeader)、xmlWriter.append(personsList.get(i).toString())迭代)解析⼀:标准解析(Iterator 迭代Code/** Dom4j⽅式,解析 XML */public String dom4jXMLResolve(){StringWriter xmlWriter = new StringWriter();InputStream is = readXML(fileName);try {SAXReader reader = new SAXReader();org.dom4j.Document doc = reader.read(is);List<Person> personsList = null;Person person = null;StringBuffer xmlHeader = new StringBuffer();Element eleRoot = doc.getRootElement(); // 获得root根节点,引⽤类为 org.dom4j.ElementString attrAuthor = eleRoot.attributeValue("author");String attrDate = eleRoot.attributeValue("date"); xmlHeader.append("root").append("\t\t");xmlHeader.append(attrAuthor).append("\t");xmlHeader.append(attrDate).append("\n");personsList = new ArrayList<Person>();// 获取root⼦节点,即personIterator<Element> iter = eleRoot.elementIterator();for(; iter.hasNext(); ) {Element elePerson = (Element)iter.next();if("person".equals(elePerson.getName())){person = new Person();// 获取person⼦节点,即id、name、blogIterator<Element> innerIter = elePerson.elementIterator();for(; innerIter.hasNext();) {Element ele = (Element)innerIter.next();if("id".equals(ele.getName())) {String id = ele.getText();person.setId(Integer.parseInt(id));} else if("name".equals(ele.getName())) {String name = ele.getText();person.setName(name);} else if("blog".equals(ele.getName())) {String blog = ele.getText();person.setBlog(blog);}}personsList.add(person);person = null;}}xmlWriter.append(xmlHeader);int personsLen = personsList.size();for(int i=0; i<personsLen; i++) {xmlWriter.append(personsList.get(i).toString());}} catch (DocumentException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return xmlWriter.toString();}运⾏结果:解析⼆:选择性解析(XPath路径)Dom4j+XPath,选择性只解析id,doc.selectNodes("//root//person//id") Code/** Dom4j⽅式,解析 XML(⽅式⼆) */public String dom4jXMLResolve2(){StringWriter xmlWriter = new StringWriter();InputStream is = readXML(fileName);try {org.dom4j.io.SAXReader reader = new org.dom4j.io.SAXReader();org.dom4j.Document doc = reader.read(is);List<Person> personsList = null;Person person = null;StringBuffer xmlHeader = new StringBuffer();Element eleRoot = doc.getRootElement(); // 获得root根节点,引⽤类为 org.dom4j.ElementString attrAuthor = eleRoot.attributeValue("author");String attrDate = eleRoot.attributeValue("date");xmlHeader.append("root").append("\t\t");xmlHeader.append(attrAuthor).append("\t");xmlHeader.append(attrDate).append("\n");personsList = new ArrayList<Person>();@SuppressWarnings("unchecked")List<Element> idList = (List<Element>) doc.selectNodes("//root//person//id"); // 选择性获取全部idIterator<Element> idIter = idList.iterator();while(idIter.hasNext()){person = new Person();Element idEle = (Element)idIter.next();String id = idEle.getText();person.setId(Integer.parseInt(id));personsList.add(person);}xmlWriter.append(xmlHeader);int personsLen = personsList.size();for(int i=0; i<personsLen; i++) {xmlWriter.append("id = ").append(personsList.get(i).getId()+"").append("\n");}} catch (DocumentException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return xmlWriter.toString();}注:借助 XPath 解析 XML 时,需要导⼊ jaxen;本⽰例需要导⼊的是最新的jaxen包jaxen-1.1.3.jar,可以下载本⽰例下⾯【源码下载】或访问Jaxen is an open source XPath library written in Java. It is adaptable to many different object models, including DOM, XOM, dom4j, and JDOM. Is it also possible to write adapters that treat non-XML trees such as compiled Java byte code or Java beans as XML, thus enabling you to query these trees with XPath too.jaxen 官⽅⽹址:jaxen下载jar包:或jaxen源码查看:或运⾏结果:。
scala中引用dom4j解析xml
scala中引用dom4j解析xml使用Scala中的dom4j库解析XML文件一、引言在软件开发过程中,经常需要处理和解析XML数据。
XML是一种标记语言,用于存储和传输数据。
为了方便处理XML数据,许多编程语言提供了相应的库和工具。
本文将介绍如何使用Scala中的dom4j库来解析XML文件。
二、dom4j简介dom4j是一个用于处理XML数据的Java库。
它提供了简单易用的API,使开发人员能够轻松地读取、修改和创建XML文档。
dom4j库具有高性能和低内存消耗的特点,因此被广泛应用于各种项目中。
三、使用dom4j解析XML1. 导入dom4j库首先,我们需要在Scala项目中导入dom4j库。
可以使用SBT或Maven等构建工具来管理项目依赖。
2. 创建XML解析器在Scala中使用dom4j解析XML文件,首先需要创建一个XML解析器对象。
可以通过如下代码来创建一个解析器对象:```scalaval xmlParser = new SAXReader()```3. 加载XML文件使用解析器对象加载XML文件。
可以通过文件路径或输入流来加载XML文件。
例如,使用文件路径加载XML文件的代码如下:```scalaval document = xmlParser.read(new File("path/to/xml/file.xml"))```4. 解析XML数据通过解析器对象,可以获取XML文档的根元素,并遍历其子元素和属性。
以下示例代码演示了如何解析XML数据:```scalaval rootElement = document.getRootElement()// 遍历子元素val elements = rootElement.elements()for (i <- 0 until elements.size()) {val element = elements.get(i).asInstanceOf[Element]// 处理子元素println("子元素名称:" + element.getName())}// 获取属性val attributes = rootElement.attributes()for (i <- 0 until attributes.size()) {val attribute = attributes.get(i).asInstanceOf[Attribute]// 处理属性println("属性名:" + attribute.getName() + ",属性值:" + attribute.getValue())}```5. 解析XML文档结构dom4j库提供了丰富的API来解析XML文档的结构。
dom4j解析xml
dom4j解析xml现在有很多⼯具包可以解析xml⽂件,但是dom4j⽆疑是其中较为简单的⼀种,下⾯就⽤⼀个例⼦来实际操作⼀下:⾸先得导⼊dom4j.jar这个夹包(⽹上⼀搜⼀⼤⽚)1.随便在⼀个地⽅建⽴⼀个user.xml⽂件,我这⼉是建⽴在d盘根⽬录下:1. <?xml version="1.0" encoding="UTF-8"?>2.3. <users>4. <user username="lisi" password="123"/>5. <user username="张三" password="123"/>6. <user username="zhangsan" password="123"/>7.8. </users><?xml version="1.0" encoding="UTF-8"?><users><user username="lisi" password="123"/><user username="张三" password="123"/><user username="zhangsan" password="123"/></users>2.对该⽂件进⾏模拟查询⽤户(按姓名查询)和添加⽤户:1. package com.easyteam.dao;2.3. import java.io.FileNotFoundException;4. import java.io.FileOutputStream;5. import java.io.IOException;6. import java.io.OutputStream;7. import java.io.OutputStreamWriter;8. import java.io.UnsupportedEncodingException;9.10. import org.dom4j.Document;11. import org.dom4j.DocumentException;12. import org.dom4j.Element;13. import org.dom4j.io.OutputFormat;14. import org.dom4j.io.SAXReader;15. import org.dom4j.io.XMLWriter;16.17. import er;18.19.20. public class Userdao {21.22. String path="d://user.xml";23.24. public User findByName(String username){25. SAXReader red=new SAXReader();//创建解析器26. try {27. Document doc=red.read(path);//得到documet对象28. Element el=(Element) doc.selectSingleNode("//user[@username='"+username+"']");//查询条件,其中//表⽰⽆限深度查询,[]中放⼊是查询条件29. if(el==null) return null;30. String attUsername=el.attributeValue("username");//得到username这个属性的值31. String attPassword=el.attributeValue("password");32. User user=new User();33. user.setUsername(attUsername);34. user.setPassword(attPassword);35. return user;36. } catch (DocumentException e) {37. throw new RuntimeException(e);38. }39. }40. public void addUser(User user){41.42. SAXReader red=new SAXReader();43. try {44. Document doc = red.read(path);45. Element attroot=doc.getRootElement();//得到根节点46. Element userel=attroot.addElement("user");//添加节点47. userel.addAttribute("username", user.getUsername());//给新节点赋值48. userel.addAttribute("password", user.getPassword());49.50. OutputFormat format=new OutputFormat("\t", true);//设置格式51. format.setTrimText(true);//清除原有格式52. XMLWriter writer;53. try {54. writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream(path),"utf-8"),format);//实例化55. writer.write(doc);//保存56. writer.close();57. } catch (Exception e) {58. throw new RuntimeException(e);59. }60.61. } catch (DocumentException e) {62. throw new RuntimeException(e);63. }64. }65. }3.测试类:1. package com.easyteam.test;2.3. import org.junit.Test;4.5. import erdao;6. import er;7.8.9. public class UserDaoTest {10. @Test11.12. public void testfindByName(){13. Userdao dao=new Userdao();14. User user= dao.findByName("lisi");15. System.out.println(user);16.17. }18. @Test19. public void testaddUser(){20. Userdao dao=new Userdao();21. User user=new User();22. user.setUsername("张三");23. user.setPassword("123");24. dao.addUser(user);25.26.27.28. }29. }。
通过dom4j解析xml字符串(示例代码)
通过dom4j解析xml字符串(⽰例代码)复制代码代码如下:import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;public class Test {@SuppressWarnings("unchecked")public static void main(String[] args) throws Exception {String xml = "<request> <param name='service'>single_trade_query </param><param name='_input_charset'>utf-8</param><param name='partner'>2088001513232645 </param><param name='out_trade_no'>20090422577264 </param> </request>";Document document = DocumentHelper.parseText(xml);Element root = document.getRootElement();List<Element> elements = root.elements();for (Iterator<Element> it = elements.iterator(); it.hasNext();) {Element element = it.next();List<Attribute> attributes = element.attributes();for (int i = 0; i < attributes.size(); i++) {Attribute attribute = attributes.get(i);if ("service".equals(attribute.getText())) {System.out.println(element.getName() + " : "+ element.getText());}}}}}或者:复制代码代码如下:import java.io.StringReader;import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.xml.sax.InputSource;public class Test {@SuppressWarnings("unchecked")public static void main(String[] args) throws Exception {String xml = "<servlet><description></description><display-name>TestServlet</display-name><servlet-name>TestServlet</servlet-name><servlet-class>test.TestServlet</servlet-class></servlet>";InputSource in = new InputSource(new StringReader(xml));in.setEncoding("UTF-8");SAXReader reader = new SAXReader();Document document = reader.read(in);Element root = document.getRootElement();List<Element> elements = root.elements();for(Iterator<Element> it = elements.iterator();it.hasNext();){Element element = it.next();System.out.println(element.getName()+" : "+element.getTextTrim());}}}或者增加ID属性,直接通过ID获取某个属性值:复制代码代码如下:import java.io.StringReader;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.xml.sax.InputSource;public class Test {public static void main(String args[]) {String xml = "<request> <param name='service' ID='tt'>single_trade_query </param><param name='_input_charset'>utf-8 </param><param name='partner'>2088001513232645 </param><param name='out_trade_no'>20090422577264 </param> </request>";InputSource source = new InputSource(new StringReader(xml));SAXReader reader = new SAXReader();Document document = null;try {document = reader.read(source);} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}Element root = document.getRootElement();System.out.println(document.elementByID("tt").getTextTrim());System.out.println(root.elementByID("tt").getTextTrim());}}注意:通过ID获取,元素ID属性名必须为“⼤写ID”,⼩写的“id”会认为是普通属性!。
dom4j解析xml的原理
dom4j解析xml的原理XML(Extensible Markup Language)是一种可扩展的标记语言,主要用于数据的存储和传输。
而dom4j是一种基于Java的XML解析器,它提供了一种简单且高效的方法来解析和处理XML文档。
本文将介绍dom4j解析XML的原理以及它的主要特点。
一、dom4j简介dom4j是一个开源的XML解析器,它采用Java语言开发。
相比于其他XML解析器,dom4j具有更高的性能和更简洁的API。
它能够将XML文档解析成一个树形结构,通过遍历这个结构来获取XML中的各个元素和属性。
二、dom4j的原理1. 加载XML文档dom4j使用SAX解析器,它可以逐行读取XML文档并将其转换成事件流。
首先,需要创建一个SAXReader对象,通过调用其read()方法,将XML文档加载到内存中。
2. 构建Document对象在加载XML文档后,dom4j会解析它,并将其转换成一个Document对象。
这个对象代表了整个XML文档的根节点,通过它可以获取XML文档中的各个节点和属性。
3. 遍历XML树拿到Document对象之后,我们可以通过它来遍历整个XML树。
dom4j提供了一系列的方法,如elementIterator()、attributeIterator()等,用于获取当前节点的子节点或属性。
4. 获取节点内容一旦获取到具体的节点,我们可以通过调用其getText()方法或getStringValue()方法来获取节点的文本内容。
5. 获取节点属性类似地,要获取节点的属性,可以通过调用attributeValue()方法或getAttributes()方法来获取。
6. 增删改查dom4j还支持对XML文档进行增删改查的操作。
我们可以通过调用相应的API来添加新节点、删除节点、修改节点内容等。
三、dom4j的特点1. 简洁而灵活的API:dom4j提供了一套简洁而强大的API,使得操作XML文档变得非常方便。
用Dom4j来解析XML文件
⽤Dom4j来解析XML⽂件Dom4j jar包地址:提取码:w5om⾸先解压Dom4j jar包,解压后如下然后把 dom4j-1.6.1.jar 复制放到⼯程⽬录下(集成开发⼯具是myeclipse)在myeclipse⼯程下直接右键dom4j-1.6.1.jar,点击Build Path → Add to Build Pathmyeclipse⾃动导⼊jar包,然后就可以使⽤jar包提供的接⼝了。
我们创建⼀个book.xml⽂件放到src⽬录下book.xml⽂件内容如下:<?xml version="1.0" encoding="UTF-8"?><书架> <书 > <书名>时间简史</书名> <作者>霍⾦</作者> <售价>60</售价> </书> <书> <书名>⼴义相对论</书名> <作者>爱因斯坦</作者> <售价>65</售价> </书></书架>Dom4j_parseXML.java编写解析代码需要导⼊的包:import java.io.FileOutputStream;import java.util.List;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;注意:除了FileOutputStream和List不是dom4j包的,其他的都是创建解析器//创建dom4j解析器SAXReader reader = new SAXReader();//加载document对象Document document = reader.read("src/book.xml");得到某个节点的内容//拿到根节点Element root = document.getRootElement();//拿到所有的书节点List<Element> list = root.elements("书");//拿到第⼆本书Element bookE1 = list.get(1);//获取售价⽂本System.out.println(bookE1.elementText("售价"));遍历所有元素节点public static void ergodic(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 ) { System.out.println(node.getName()); treeWalk( (Element) node ); } }}修改某个元素节点的主体内容//获取根节点Element root = document.getRootElement();//拿到第⼆种书节点Element bookEL = (Element) root.elements("书").get(1);//拿到售价节点Element priceE1 = bookEL.element("售价");//改变主体内容priceE1.setText("55");//将结果保存到硬盘上XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint()); writer.write(document);writer.close();向指定元素节点中添加⼦元素节点//获取根节点Element root = document.getRootElement();//拿到第⼀种书节点Element bookEL = (Element) root.elements("书").get(0);//拿到售价节点Element priceE1 = bookEL.element("售价");//添加⼦节点priceE1.addElement("内部价").setText("50");//将结果保存到硬盘上XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint()); writer.write(document);writer.close();向指定元素节点上增加同级元素节点//获取根节点Element root = document.getRootElement();//拿到第⼀种书节点Element bookEL = (Element) root.elements("书").get(0);//给书节点添加⼦节点bookEL.addElement("批发价").setText("30");//将结果保存到硬盘上XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint()); writer.write(document);writer.close();删除指定的元素节点Element root = document.getRootElement();Element bookEL = (Element) root.elements("书").get(0);Element insideprice = bookEL.element("售价").element("内部价");//删除insideprice.getParent().remove(insideprice);//将结果保存到硬盘上XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint()); writer.write(document);writer.close();操作⽂件的属性//获取根节点Element root = document.getRootElement();//拿到第⼀种书节点Element bookEL = (Element) root.elements("书").get(0);//增加⼀个属性bookEL.addAttribute("类", "科普");//将结果保存到硬盘上XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint()); writer.write(document);writer.close();以上就是⽤dom4j来解析XML⽂件的⼏种⽅式。
Dom4j解析XML文档
//使用Dom4j创建XML文档//【1】定义一个XML文档对象Document document=DocumentHelper.createDocument();//【2】定义一个XML元素,添加根结点Element root=document.addElement("根结点名称");///Element接口重要常用方法///addComment 添加注释///addAttribue 添加属性///addElement 添加子元素//【3】通过XMLWriter生成物理文件XMLWriter writer=new XMLWriter(fos,format);writer.write(document);///参数fos是指输出流;参数format为格式化文件//OutputFormat类格式化输出-默认采用createC-//ompactFromat比较紧凑-最好使用createPrettyPrint////DOm4j解析XML文件///【1】构建XML文档对象SAXReader reader=new SAXReader();////创建SAXReader对象--用来读取文档Document document=reader.read(new File("E:/student.xml"));///读取XML文档对象//【2】获取根结点Element root=document.getRootElement();///【3】获取子结点//【--1--】通过element()方法获取指定名称的第一个节点Element student=root.element("student");for(Iterator iterator=student.elementIterator();iterator.hasNext();){Element element=(Element)iterator.next();System.out.println(element.getStringValue());}//【--2--】通过elements()方法获取指定名称的全部节点Element student=root.elements("student");for(Iterator iterator=student.elementIterator();iterator.hasNext();){Element element=(Element)iterator.next();System.out.println(element.getStringValue());}///【4】获取属性的方法Element student=root.element("student");Attribute attribute=student.attribute("id");///按照顺序获取属性//student.attribute(0);List list=student.attribute("id");///获取全部属性///【5】修改XML文档Element root=document.getRootElement();///获取根结点Element student=root.element("studnet");///获取要修改的父结点Element name=student.element("name");///获取修改节点name.setText("--");///修改节点内容name.setName("--");///个性节点名Attribute id=student.attribute("id");id.setText("3");////【6】删除节点或者属性Element root=document.getRootElement();///获取根结点Element student=root.element("studnet");///获取要删除的父结点Element name=student.element("name");///获取删除节点name.remove(name);////删除指定节点studnet.remove(studnet.attribute("id"));//删除节点属性值///使用DOM生成解析XML文件//【1】创建DocumentBuilderFactory工厂-通过该工厂得到//DOM解析器工厂实例DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();///【2】通过解析器工厂获取DOM解析器DocumentBuilder builder=factory.newDocumentBuilder();///【3】从XML文件中解析Document对象语法:XML路径信息Document document=builder.parse(String path);///【4】从XML标签中获得所有属性值语法如下:NodeList nodeList=document.getElementsByTagName(String tagname);。
Dom4j解析xml文件-递归遍历所有节点和属性
Dom4j解析xml⽂件-递归遍历所有节点和属性Dom4j是中常⽤读取xml⽂件的⼯具,就⽅便性和性能⽅⾯,⼀定程度要优于JDK中Domcument和SAX解析的,感兴趣的童鞋可以看看这篇⽂章,下边我就分享⼀下⽤Dom4j对xml⽂件进⾏遍历,⼀看代码就明⽩了,注释的很详细。
被测试的xml⽂件test.xml<?xml version="1.0" encoding="UTF-8"?><root><user editor="chenleixing" date="2015-02-15"><name>张三</name><year>24</year><sex>男</sex></user><user editor="zhangxiaochao" date="2015-02-15"><name>李四</name><year>24</year><sex>⼥</sex></user></root>创建File,获取根节点/*** 从指定节点开始,递归遍历所有⼦节点* @author chenleixing*/public void getNodes(Element node){System.out.println("--------------------");//当前节点的名称、⽂本内容和属性System.out.println("当前节点名称:"+node.getName());//当前节点名称System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称List<Attribute> listAttr=node.attributes();//当前节点的所有属性的listfor(Attribute attr:listAttr){//遍历当前节点的所有属性String name=attr.getName();//属性名称String value=attr.getValue();//属性的值System.out.println("属性名称:"+name+"属性值:"+value);}//递归遍历当前节点所有的⼦节点List<Element> listElement=node.elements();//所有⼀级⼦节点的listfor(Element e:listElement){//遍历所有⼀级⼦节点this.getNodes(e);//递归}}从指定节点开始,递归遍历所有节点和属性/*** 从指定节点开始,递归遍历所有⼦节点* @author chenleixing*/public void getNodes(Element node){System.out.println("--------------------");//当前节点的名称、⽂本内容和属性System.out.println("当前节点名称:"+node.getName());//当前节点名称System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称 List<Attribute> listAttr=node.attributes();//当前节点的所有属性的list for(Attribute attr:listAttr){//遍历当前节点的所有属性String name=attr.getName();//属性名称String value=attr.getValue();//属性的值System.out.println("属性名称:"+name+"属性值:"+value);}//递归遍历当前节点所有的⼦节点List<Element> listElement=node.elements();//所有⼀级⼦节点的list for(Element e:listElement){//遍历所有⼀级⼦节点this.getNodes(e);//递归}}输出结果--------------------当前节点名称:root当前节点的内容:--------------------当前节点名称:user当前节点的内容:属性名称:editor属性值:chenleixing属性名称:date属性值:2015-02-15--------------------当前节点名称:name当前节点的内容:张三--------------------当前节点名称:year当前节点的内容:24--------------------当前节点名称:sex当前节点的内容:男--------------------当前节点名称:user当前节点的内容:属性名称:editor属性值:zhangxiaochao属性名称:date属性值:2015-02-15--------------------当前节点名称:name当前节点的内容:李四--------------------当前节点名称:year当前节点的内容:24--------------------当前节点名称:sex当前节点的内容:⼥。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dom4j-1.6.1.jarDom4j jar包创建xml文件代码:public void createXML(){//使用 DocumentHelper 类创建一个文档实例。
DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。
Document document = DocumentHelper.createDocument();//使用 addElement() 方法创建根元素 catalog 。
addElement() 用于向 XML 文档中增加元素。
Element catalogElement = document.addElement("catalog");//使用 addElement() 方法创建根元素 catalog 。
addElement() 用于向 XML 文档中增加元素。
catalogElement.addComment("An XML catalog");//在 catalog 元素中使用 addProcessingInstruction() 方法增加一个处理指令。
catalogElement.addProcessingInstruction("target", "text");//在 catalog 元素中使用 addElement() 方法增加 journal 元素。
Element journalElement = catalogElement.addElement("journal");//使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 属性。
journalElement.addAttribute("title", "XML Zone");journalElement.addAttribute("publisher", "IBM developerWorks");//在journal 元素中使用addElement() 方法增加 article元素。
Element articleElement = journalElement.addElement("article");//为 article 元素增加 level 和 date 属性。
articleElement.addAttribute("level", "Intermediate");articleElement.addAttribute("date", "December-2001");//在article 元素中使用addElement() 方法添加 title 元素Element titleElement = articleElement.addElement("title");//使用 setText() 方法设置 article 元素的文本。
titleElement.setText("Java configuration with XML Schema");//在article 元素中使用addElement() 方法添加 author 元素Element authorElement = articleElement.addElement("author");//在 author 元素中增加 firstname 元素并设置该元素的文本。
Element firstnameElement = authorElement.addElement("firstname"); firstnameElement.setText("Marcello");//在 author 元素中增加 lastname 元素并设置该元素的文本。
Element lastnameElement = authorElement.addElement("lastname");lastnameElement.setText("Vitaletti");//可以使用 addDocType() 方法添加文档类型说明。
//document.addDocType("catalog",null,"file://c:/Dtds/catalog.dtd");try{XMLWriter output = new XMLWriter(new FileWriter( newFile("./src/com/lingzhi/xml/parser/catalog.xml") ));output.write( document );output.close();}catch(IOException e){System.out.println(e.getMessage());}}解析修改xml文件代码:public void updateXml(){InputStream inputStream =Thread.currentThread().getContextClassLoader().getResourceAsStream("com/lingzhi/xml/parser/addresses.xml");try {Reader reader = new InputStreamReader(inputStream , "utf-8");SAXReader saxReader = new SAXReader();Document doc =saxReader.read("src/com/lingzhi/xml/parser/catalog.xml");Element root = doc.getRootElement();Element childNode = null;for(Iterator it = root.elementIterator("journal"); it.hasNext();) {childNode = (Element) it.next();for (Iterator iterator =childNode.elementIterator("article");iterator.hasNext();) {Element element = (Element) iterator.next();element.attribute("level").setValue("Introductory");element.attribute("date").setValue("October-2002");for(Iterator iterator2 =element.elementIterator("title");iterator2.hasNext();){Element titleElement = (Element) iterator2.next();titleElement.setText("Create flexible and extensible XML schema");}for(Iterator iterator2 =element.elementIterator("author");iterator2.hasNext();){Element authorElement = (Element) iterator2.next();for(Iterator iterator3 =authorElement.elementIterator();iterator3.hasNext();){Element authorZElement = (Element) iterator3.next();if(authorZElement.getName().equals("firstname")){authorZElement.setText("Ayesha");}else if (authorZElement.getName().equals("lastname")) { authorZElement.setText("Malik");}}}}/*Attribute attribute = childNode.attribute("title");System.out.println(attribute.getValue());*//*for(Iterator iterator =childNode.attributeIterator();iterator.hasNext();){Attribute attribute = (Attribute) iterator.next();System.out.println(attribute.getName()+":"+attribute.getValue());}*/}。