亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java中的XML讀取

2019-11-06 06:29:00
字體:
來源:轉載
供稿:網友

xml的作用

-不同軟件間的數據傳輸 -不同系統間的數據傳輸 -不同平臺間的數據共享

XML四種解析方式

-DOM解析 -SAX解析 -DOM4J解析 -JDOM解析 -DOM解析與SAX解析不需要額外的jar,是java官方的解析方式。 -解析遇到亂碼時可以修改xml中編碼方式,或者對InputStream流進行InputStreamReader包裝并指定編碼方式。

常用XML節點類型

節點類型 NodeType Named Constant nodeName 的返回值 nodeValue的返回值
Element 1 ELEMENT_NODE element name null
Attr 2 ATTRIBUTE_NODE 屬性名稱 屬性值
Text 3 TEXT_NODE text 節點內容

DOM解析

-將整個xml加載到內存中再解析 -所解析的XML文件(以后的解析方法中不再贅述)

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.sWord" value="${jdbc.password}"/> </bean> <!-- 配置hibernate其他相關屬性 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- 注入連接池 --> <property name="dataSource" ref="dataSource"/> <!-- 配置hibernate屬性 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!-- 加載hibernate配置文件 --> <property name="mappingResources"> <list> <value>entity/Employee.hbm.xml</value> <value>entity/Department.hbm.xml</value> </list> </property> </bean> <!-- 配置Action --> <bean id="employeeAction" class="action.EmployeeAciton" scope="prototype"> <property name="employeeService" ref="employeeService"/> <property name="departmentService" ref="departmentService"/> </bean> <bean id="departmentAction" class="action.DepartmentAction" scope="prototype"> <property name="departmentService" ref="departmentService"/> </bean> <!-- 配置業務層 --> <bean id="employeeService" class="service.EmployeeServiceImpl"> <property name="employeeDAO" ref="employeeDAO"/> </bean> <bean id="departmentService" class="service.DepartmentServiceImpl"> <property name="departmentDAO" ref="departmentDAO"/> </bean> <!-- 配置DAO --> <bean id="employeeDAO" class="dao.EmployeeDAOImpl"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="departmentDAO" class="dao.DepartmentDAOImpl"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 配置事務管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 開啟注解事務 --> <tx:annotation-driven transaction-manager="transactionManager"/></beans>

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;

public class DOM {

public static void main(String[] args) { // 創建一個DocumentBuilderFactory對象 DocumentBuilderFactory xDocumentBuilderFactory = DocumentBuilderFactory.newInstance(); try { // 創建一個DocumentBuilder對象 DocumentBuilder xdocumentBuilder = xDocumentBuilderFactory.newDocumentBuilder(); // 傳入要解析的XML文件 Document xDocument = xdocumentBuilder.parse("applicationContext.xml"); // 通過標簽獲得節點集合 NodeList beanList = xDocument.getElementsByTagName("bean"); System.out.println("共有" + beanList.getLength() + "個節點"); // 遍歷每一個bean節點 for (int i = 0; i < beanList.getLength(); i++) { // 獲取其中一個節點 Node bean = beanList.item(i); // 獲取所有屬性值 NamedNodeMap attrs = bean.getAttributes(); System.out.println("第" + (i + 1) + "個bean有" + attrs.getLength() + "個屬性"); // 遍歷節點屬性 for (int j = 0; j < attrs.getLength(); j++) { // 獲取某一屬性 Node attr = attrs.item(j); // 獲取屬性名 System.out.println("屬性名:" + attr.getNodeName()); // 獲取屬性值 System.out.println("屬性值:" + attr.getNodeValue()); } // 當不需要遍歷所有屬性時,采用以下方法可遍歷個別已知屬性 Element bean2 = (Element) beanList.item(i); System.out.println("采用Element方式獲得id:" + bean2.getAttribute("id")); // 解析bean節點的子節點 NodeList childBean = bean.getChildNodes(); // 遍歷 childBean每個節點的節點名和節點值,空白和換行符也會算作子節點 System.out.println("第" + (i + 1) + "bean" + "共有" + childBean.getLength() + "個子節點"); for (int j = 0; j < childBean.getLength(); j++) { // 區分text類型的Node以及element類型的Node,過濾掉空白與換行符 if (childBean.item(j).getNodeType() == Node.ELEMENT_NODE) { // 獲取element類型節點的節點名 System.out.println("第" + (j + 1) + "個節點的節點名:" + childBean.item(j).getNodeName()); // element會把標簽中的內容視為標簽的子節點,所以要想獲取內容需先訪問子節點 if(childBean.item(j).getFirstChild() != null){ System.out.println("第" + (j + 1) + "個節點的節點值:" + childBean.item(j).getFirstChild().getNodeValue()); } // 獲取子節點的節點值以及標簽之間的值 System.out.println("第" + (j + 1) + "個節點的節點值:" + childBean.item(j).getTextContent()); } } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }}

} -Java代碼

import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class DOM { public static void main(String[] args) { // 創建一個DocumentBuilderFactory對象 DocumentBuilderFactory xDocumentBuilderFactory = DocumentBuilderFactory.newInstance(); try { // 創建一個DocumentBuilder對象 DocumentBuilder xdocumentBuilder = xDocumentBuilderFactory.newDocumentBuilder(); // 傳入要解析的XML文件 Document xDocument = xdocumentBuilder.parse("applicationContext.xml"); // 通過標簽獲得節點集合 NodeList beanList = xDocument.getElementsByTagName("bean"); System.out.println("共有" + beanList.getLength() + "個節點"); // 遍歷每一個bean節點 for (int i = 0; i < beanList.getLength(); i++) { // 獲取其中一個節點 Node bean = beanList.item(i); // 獲取所有屬性值 NamedNodeMap attrs = bean.getAttributes(); System.out.println("第" + (i + 1) + "個bean有" + attrs.getLength() + "個屬性"); // 遍歷節點屬性 for (int j = 0; j < attrs.getLength(); j++) { // 獲取某一屬性 Node attr = attrs.item(j); // 獲取屬性名 System.out.println("屬性名:" + attr.getNodeName()); // 獲取屬性值 System.out.println("屬性值:" + attr.getNodeValue()); } // 當不需要遍歷所有屬性時,采用以下方法可遍歷個別已知屬性 Element bean2 = (Element) beanList.item(i); System.out.println("采用Element方式獲得id:" + bean2.getAttribute("id")); // 解析bean節點的子節點 NodeList childBean = bean.getChildNodes(); // 遍歷 childBean每個節點的節點名和節點值,空白和換行符也會算作子節點 System.out.println("第" + (i + 1) + "bean" + "共有" + childBean.getLength() + "個子節點"); for (int j = 0; j < childBean.getLength(); j++) { // 區分text類型的Node以及element類型的Node,過濾掉空白與換行符 if (childBean.item(j).getNodeType() == Node.ELEMENT_NODE) { // 獲取element類型節點的節點名 System.out.println("第" + (j + 1) + "個節點的節點名:" + childBean.item(j).getNodeName()); // element會把標簽中的內容視為標簽的子節點,所以要想獲取內容需先訪問子節點 if(childBean.item(j).getFirstChild() != null){ System.out.println("第" + (j + 1) + "個節點的節點值:" + childBean.item(j).getFirstChild().getNodeValue()); } // 獲取子節點的節點值以及標簽之間的值 System.out.println("第" + (j + 1) + "個節點的節點值:" + childBean.item(j).getTextContent()); } } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}

共有9個節點 第1個bean有2個屬性 屬性名:class 屬性值:com.mchange.v2.c3p0.ComboPooledDataSource 屬性名:id 屬性值:dataSource 采用Element方式獲得id:dataSource 第1bean共有9個子節點 第2個節點的節點名:property 第2個節點的節點值: 第4個節點的節點名:property 第4個節點的節點值: 第6個節點的節點名:property 第6個節點的節點值: 第8個節點的節點名:property 第8個節點的節點值: 第2個bean有2個屬性 屬性名:class 屬性值:org.springframework.orm.hibernate4.LocalSessionFactoryBean 屬性名:id 屬性值:sessionFactory 采用Element方式獲得id:sessionFactory 第2bean共有13個子節點 第4個節點的節點名:property 第4個節點的節點值: 第8個節點的節點名:property 第8個節點的節點值:

第8個節點的節點值:

org.hibernate.dialect.MySQLDialect true true update

第12個節點的節點名:property 第12個節點的節點值:

第12個節點的節點值:

entity/Employee.hbm.xml entity/Department.hbm.xml

第3個bean有3個屬性 屬性名:class 屬性值:action.EmployeeAciton 屬性名:id 屬性值:employeeAction 屬性名:scope 屬性值:prototype 采用Element方式獲得id:employeeAction 第3bean共有5個子節點 第2個節點的節點名:property 第2個節點的節點值: 第4個節點的節點名:property 第4個節點的節點值: 第4個bean有3個屬性 屬性名:class 屬性值:action.DepartmentAction 屬性名:id 屬性值:departmentAction 屬性名:scope 屬性值:prototype 采用Element方式獲得id:departmentAction 第4bean共有3個子節點 第2個節點的節點名:property 第2個節點的節點值: 第5個bean有2個屬性 屬性名:class 屬性值:service.EmployeeServiceImpl 屬性名:id 屬性值:employeeService 采用Element方式獲得id:employeeService 第5bean共有3個子節點 第2個節點的節點名:property 第2個節點的節點值: 第6個bean有2個屬性 屬性名:class 屬性值:service.DepartmentServiceImpl 屬性名:id 屬性值:departmentService 采用Element方式獲得id:departmentService 第6bean共有3個子節點 第2個節點的節點名:property 第2個節點的節點值: 第7個bean有2個屬性 屬性名:class 屬性值:dao.EmployeeDAOImpl 屬性名:id 屬性值:employeeDAO 采用Element方式獲得id:employeeDAO 第7bean共有3個子節點 第2個節點的節點名:property 第2個節點的節點值: 第8個bean有2個屬性 屬性名:class 屬性值:dao.DepartmentDAOImpl 屬性名:id 屬性值:departmentDAO 采用Element方式獲得id:departmentDAO 第8bean共有3個子節點 第2個節點的節點名:property 第2個節點的節點值: 第9個bean有2個屬性 屬性名:class 屬性值:org.springframework.orm.hibernate4.HibernateTransactionManager 屬性名:id 屬性值:transactionManager 采用Element方式獲得id:transactionManager 第9bean共有3個子節點 第2個節點的節點名:property 第2個節點的節點值:

SAX解析

-通過自己創建的Handler處理類去逐個分析遇到的節點 -startElement解析開始節點 -endElement解析結束節點

主函數

import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;import entity.Bean;import handler.SAXParserHandler;public class SAX { public static void main(String[] args) { // 獲取一個SAXParseFactory的實例 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); try { // 通過saxParserFactory獲取SAXparse SAXParser saxParser = saxParserFactory.newSAXParser(); // 創建handler對象 SAXParserHandler saxParserHandler = new SAXParserHandler(); saxParser.parse("applicationContext.xml", saxParserHandler); System.out.println("bean個數:"+saxParserHandler.getBeanList().size()); for (Bean bean : saxParserHandler.getBeanList()) { System.out.println(bean.getId()); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}

處理類

import java.util.ArrayList;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import entity.Bean;public class SAXParserHandler extends DefaultHandler { // 通過該全局變量確定已遍歷的bean的數目 private int beanIndex = 0; // 用于存放屬性值 private String value = null; // 創建一個bean對象 private Bean bean; // 用于保存遍歷過的bean private ArrayList<Bean> beanList = new ArrayList<Bean>(); // 用來解析xml文件的開始標簽 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); // 開始解析bean元素屬性 if (qName.equals("bean")) { // 創建一個bean對象 bean = new Bean(); // 遍歷一個bean,則beanIndex+1; beanIndex++; // 獲取屬性的個數 int num = attributes.getLength(); for (int i = 0; i < num; i++) { System.out.println("bean" + "第" + (i + 1) + "個屬性名" + attributes.getQName(i)); System.out.println("屬性值:" + attributes.getValue(i)); if (attributes.getQName(i).equals("id")) { bean.setId(attributes.getValue(i)); } } } else { System.out.println("節點名是:" + qName); } } // 用來遍歷xml的結束標簽 @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if (qName.equals("bean")) { beanList.add(bean); bean = null; System.out.println("第" + beanIndex + "個bean結束遍歷"); } else if (qName.equals("class")) { bean.setClazz(value); } else if (qName.equals("scope")) { bean.setScope(value); } } // 標識解析開始 @Override public void startDocument() throws SAXException { super.startDocument(); System.out.println("SAX解析開始"); } // 標識解析結束 @Override public void endDocument() throws SAXException { super.endDocument(); System.out.println("SAX解析結束"); } // 獲得節點值 @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); // 獲得節點值 value = new String(ch, start, length); // 判斷節點值是否為空 if (!value.trim().equals("")) { System.out.println("節點值:" + value); } } public ArrayList<Bean> getBeanList() { return beanList; }}

實體類

public class Bean { private String id; private String clazz; private String scope; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getClazz() { return clazz; } public void setClazz(String clazz) { this.clazz = clazz; } public String getScope() { return scope; } public void setScope(String scope) { this.scope = scope; }}

輸出結果

SAX解析開始 節點名是:beans 節點名是:context:property-placeholder bean第1個屬性名id 屬性值:dataSource bean第2個屬性名class 屬性值:com.mchange.v2.c3p0.ComboPooledDataSource 節點名是:property 節點名是:property 節點名是:property 節點名是:property 第1個bean結束遍歷 bean第1個屬性名id 屬性值:sessionFactory bean第2個屬性名class 屬性值:org.springframework.orm.hibernate4.LocalSessionFactoryBean 節點名是:property 節點名是:property 節點名是:props 節點名是:prop 節點值:org.hibernate.dialect.MySQLDialect 節點名是:prop 節點值:true 節點名是:prop 節點值:true 節點名是:prop 節點值:update 節點名是:property 節點名是:list 節點名是:value 節點值:entity/Employee.hbm.xml 節點名是:value 節點值:entity/Department.hbm.xml 第2個bean結束遍歷 bean第1個屬性名id 屬性值:employeeAction bean第2個屬性名class 屬性值:action.EmployeeAciton bean第3個屬性名scope 屬性值:prototype 節點名是:property 節點名是:property 第3個bean結束遍歷 bean第1個屬性名id 屬性值:departmentAction bean第2個屬性名class 屬性值:action.DepartmentAction bean第3個屬性名scope 屬性值:prototype 節點名是:property 第4個bean結束遍歷 bean第1個屬性名id 屬性值:employeeService bean第2個屬性名class 屬性值:service.EmployeeServiceImpl 節點名是:property 第5個bean結束遍歷 bean第1個屬性名id 屬性值:departmentService bean第2個屬性名class 屬性值:service.DepartmentServiceImpl 節點名是:property 第6個bean結束遍歷 bean第1個屬性名id 屬性值:employeeDAO bean第2個屬性名class 屬性值:dao.EmployeeDAOImpl 節點名是:property 第7個bean結束遍歷 bean第1個屬性名id 屬性值:departmentDAO bean第2個屬性名class 屬性值:dao.DepartmentDAOImpl 節點名是:property 第8個bean結束遍歷 bean第1個屬性名id 屬性值:transactionManager bean第2個屬性名class 屬性值:org.springframework.orm.hibernate4.HibernateTransactionManager 節點名是:property 第9個bean結束遍歷 節點名是:tx:annotation-driven SAX解析結束 bean個數:9 dataSource sessionFactory employeeAction departmentAction employeeService departmentService employeeDAO departmentDAO transactionManager

JDOM解析

-需要jdom-2.0.6.jar

主類

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import org.jdom2.Attribute;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;import entity.Bean;public class JDOM { private static Bean beanEntity; private static ArrayList<Bean> beanList = new ArrayList<Bean>(); public static void main(String[] args) { // 創建SAXBuilder SAXBuilder saxBuilder = new SAXBuilder(); try { // 創建輸入流,將xml加載到輸入流中 InputStream inputStream = new FileInputStream("applicationContext.xml"); // 指定編碼方式,防止中文亂碼 InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); // 將輸入流加載到saxBuilder中 Document document = saxBuilder.build(inputStreamReader); // 獲取根節點 Element rootElement = document.getRootElement(); // 獲取子節點集合 List<Element> listElemrnt = rootElement.getChildren(); // 遍歷子節點集合 for (Element bean : listElemrnt) { // 創建bean對象 beanEntity = new Bean(); System.out.println("開始解析第" + (listElemrnt.indexOf(bean) + 1) + "bean"); // 解析bean屬性 List<Attribute> attrlist = bean.getAttributes(); // 獲取特定屬性值 // System.out.println(bean.getAttributeValue("id")); for (Attribute attribute : attrlist) { // 獲得節點名稱 System.out.println("屬性名:" + attribute.getName()); // 保存有意義的文本,自動過濾空格回車 System.out.println("屬性值:" + attribute.getValue()); if (attribute.getName().equals("id")) { beanEntity.setId(attribute.getValue()); } } // 對bean節點子孫節點及節點值進行遍歷 List<Element> beanChildren = bean.getChildren(); for (Element child : beanChildren) { // 獲得節點名稱 System.out.println("節點名:" + child.getName()); // 保存有意義的文本,自動過濾空格回車 System.out.println("節點值:" + child.getValue()); if (child.getName().equals("property")) { beanEntity.setClazz(child.getValue()); } } beanList.add(beanEntity); beanEntity = null; System.out.println("集合長度:"+beanList.size()); for (Bean beanElement : beanList) { System.out.println(beanElement.getId()); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}

輸出結果

開始解析第1bean 屬性名:location 屬性值:classpath:jdbc.properties 集合長度:1 null 開始解析第2bean 屬性名:id 屬性值:dataSource 屬性名:class 屬性值:com.mchange.v2.c3p0.ComboPooledDataSource 節點名:property 節點值: 節點名:property 節點值: 節點名:property 節點值: 節點名:property 節點值: 集合長度:2 null dataSource 開始解析第3bean 屬性名:id 屬性值:sessionFactory 屬性名:class 屬性值:org.springframework.orm.hibernate4.LocalSessionFactoryBean 節點名:property 節點值: 節點名:property 節點值:

org.hibernate.dialect.MySQLDialect true true update

節點名:property 節點值:

entity/Employee.hbm.xml entity/Department.hbm.xml

集合長度:3 null dataSource sessionFactory 開始解析第4bean 屬性名:id 屬性值:employeeAction 屬性名:class 屬性值:action.EmployeeAciton 屬性名:scope 屬性值:prototype 節點名:property 節點值: 節點名:property 節點值: 集合長度:4 null dataSource sessionFactory employeeAction 開始解析第5bean 屬性名:id 屬性值:departmentAction 屬性名:class 屬性值:action.DepartmentAction 屬性名:scope 屬性值:prototype 節點名:property 節點值: 集合長度:5 null dataSource sessionFactory employeeAction departmentAction 開始解析第6bean 屬性名:id 屬性值:employeeService 屬性名:class 屬性值:service.EmployeeServiceImpl 節點名:property 節點值: 集合長度:6 null dataSource sessionFactory employeeAction departmentAction employeeService 開始解析第7bean 屬性名:id 屬性值:departmentService 屬性名:class 屬性值:service.DepartmentServiceImpl 節點名:property 節點值: 集合長度:7 null dataSource sessionFactory employeeAction departmentAction employeeService departmentService 開始解析第8bean 屬性名:id 屬性值:employeeDAO 屬性名:class 屬性值:dao.EmployeeDAOImpl 節點名:property 節點值: 集合長度:8 null dataSource sessionFactory employeeAction departmentAction employeeService departmentService employeeDAO 開始解析第9bean 屬性名:id 屬性值:departmentDAO 屬性名:class 屬性值:dao.DepartmentDAOImpl 節點名:property 節點值: 集合長度:9 null dataSource sessionFactory employeeAction departmentAction employeeService departmentService employeeDAO departmentDAO 開始解析第10bean 屬性名:id 屬性值:transactionManager 屬性名:class 屬性值:org.springframework.orm.hibernate4.HibernateTransactionManager 節點名:property 節點值: 集合長度:10 null dataSource sessionFactory employeeAction departmentAction employeeService departmentService employeeDAO departmentDAO transactionManager 開始解析第11bean 屬性名:transaction-manager 屬性值:transactionManager 集合長度:11 null dataSource sessionFactory employeeAction departmentAction employeeService departmentService employeeDAO departmentDAO transactionManager null

DOM4J解析

主類

import java.io.File;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class DOM4J { public static void main(String[] args) { SAXReader saxReader = new SAXReader(); try { // 通過saxReader加載xml文件并獲取document對象 Document document = saxReader.read(new File("applicationContext.xml")); Element beans = document.getRootElement(); Iterator<Element> iterator = beans.elementIterator(); while (iterator.hasNext()) { Element bean = iterator.next(); System.out.println("開始遍歷:"+bean.getName()); // 獲取bean的屬性名以及屬性值 List<Attribute> beanList = bean.attributes(); for (Attribute attribute : beanList) { System.out.println("節點名:" + attribute.getName()); System.out.println("節點值:" + attribute.getValue()); } Iterator<Element> beanIt = bean.elementIterator(); while (beanIt.hasNext()) { Element beanChild = beanIt.next(); System.out.println("子節點名:" + beanChild.getName()); System.out.println("子節點值:" + beanChild.getStringValue()); } } } catch (DocumentException e) { e.printStackTrace(); } }}

輸出結果

開始遍歷:property-placeholder 節點名:location 節點值:classpath:jdbc.properties 開始遍歷:bean 節點名:id 節點值:dataSource 節點名:class 節點值:com.mchange.v2.c3p0.ComboPooledDataSource 子節點名:property 子節點值: 子節點名:property 子節點值: 子節點名:property 子節點值: 子節點名:property 子節點值: 開始遍歷:bean 節點名:id 節點值:sessionFactory 節點名:class 節點值:org.springframework.orm.hibernate4.LocalSessionFactoryBean 子節點名:property 子節點值: 子節點名:property 子節點值:

org.hibernate.dialect.MySQLDialect true true update

子節點名:property 子節點值:

entity/Employee.hbm.xml entity/Department.hbm.xml

開始遍歷:bean 節點名:id 節點值:employeeAction 節點名:class 節點值:action.EmployeeAciton 節點名:scope 節點值:prototype 子節點名:property 子節點值: 子節點名:property 子節點值: 開始遍歷:bean 節點名:id 節點值:departmentAction 節點名:class 節點值:action.DepartmentAction 節點名:scope 節點值:prototype 子節點名:property 子節點值: 開始遍歷:bean 節點名:id 節點值:employeeService 節點名:class 節點值:service.EmployeeServiceImpl 子節點名:property 子節點值: 開始遍歷:bean 節點名:id 節點值:departmentService 節點名:class 節點值:service.DepartmentServiceImpl 子節點名:property 子節點值: 開始遍歷:bean 節點名:id 節點值:employeeDAO 節點名:class 節點值:dao.EmployeeDAOImpl 子節點名:property 子節點值: 開始遍歷:bean 節點名:id 節點值:departmentDAO 節點名:class 節點值:dao.DepartmentDAOImpl 子節點名:property 子節點值: 開始遍歷:bean 節點名:id 節點值:transactionManager 節點名:class 節點值:org.springframework.orm.hibernate4.HibernateTransactionManager 子節點名:property 子節點值: 開始遍歷:annotation-driven 節點名:transaction-manager 節點值:transactionManager

四種解析方式進行對比

基礎方法:DOM/SAX

-Java自帶方法,具有平臺無關性 -基于事件驅動

DOM解析過程

-將xml文件一次性加載入內存中,并形成DOM樹

優點

-形成了樹結構,直觀并且易于理解,代碼容易編寫 -解析過程保留在內存中,方便修改

缺點

-當xml文件較大時,對內存耗費比較大,容易影響解析性能并造成內存溢出

SAX解析過程

-基于事件,一步一步解析 -每遇到一個標簽則進行判斷,采用handler中哪種方式進行處理

優點

-采用事件驅動模式,對內存耗費小 -適用于只需要處理xml中的數據時

缺點

-不易編碼 -很難同時訪問一個xml中的多處數據

JDOM與DOM/DOM4J

JDOM

-僅使用具體類而不使用接口 -API大量使用Collections類

DOM4J

-JDOM的智能分支,合并了許多超出基本xml文檔表示的功能 -使用接口和抽象基本類的方法,是一個優秀的api -性能優異,靈活性好,功能強大,易用 -源碼開放 -建議使用

性能對比(速度由塊到慢)

文件較小時

SAX>DOM>DOM4J>JDOM


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线播放日韩精品| 亚洲精品成人免费| 亚洲国产精品久久久| 国产精品美女视频网站| 中文字幕日韩在线播放| 欧美中在线观看| 中文字幕日韩欧美| 97视频在线观看免费高清完整版在线观看| 色噜噜狠狠狠综合曰曰曰| 精品偷拍各种wc美女嘘嘘| 欧美一级免费视频| 亚洲国产天堂久久综合网| 久久人人97超碰精品888| 日韩有码在线观看| 国产精品视频久久久久| 色悠久久久久综合先锋影音下载| 精品久久久久久久久久久久| 久久亚洲精品小早川怜子66| 国产91精品久久久久久久| 欧美大奶子在线| 国产精品久久久久久久久免费看| 欧美体内谢she精2性欧美| 久色乳综合思思在线视频| 青草青草久热精品视频在线网站| 国产精品专区第二| 国产精品99导航| 亚洲国产99精品国自产| 亚洲福利在线看| 久久精品色欧美aⅴ一区二区| 亚洲男人第一网站| 日韩成人在线观看| 国产精品自拍视频| 亚洲人高潮女人毛茸茸| 中文字幕日韩精品在线| 国产日本欧美一区| 亚洲视频777| 成人写真福利网| 欧美大片免费看| 中文字幕av一区中文字幕天堂| 国产精品99久久久久久久久久久久| 欧美性在线观看| 日韩在线国产精品| 疯狂做受xxxx欧美肥白少妇| 国产成人一区二区三区小说| 成人在线视频网站| 最近2019免费中文字幕视频三| 亚洲人成啪啪网站| 亚洲欧美一区二区三区情侣bbw| 欧美亚洲另类激情另类| 久久手机免费视频| 国语自产精品视频在线看| 欧美日韩激情视频| 国产91色在线|免| 欧美一级bbbbb性bbbb喷潮片| 亚洲一区亚洲二区| 国产欧美精品一区二区三区介绍| 2020久久国产精品| 久久久精品一区二区三区| 日韩风俗一区 二区| 中文字幕精品国产| 2020欧美日韩在线视频| 久久久久久久一区二区三区| 96sao精品视频在线观看| 色综合久久久久久中文网| 中文日韩电影网站| 亚洲福利在线播放| 992tv在线成人免费观看| 日韩在线视频观看正片免费网站| 欧美激情a∨在线视频播放| 92裸体在线视频网站| 亚洲久久久久久久久久| 都市激情亚洲色图| 亚洲欧美在线看| 亚洲人成网7777777国产| 热久久视久久精品18亚洲精品| 久久久亚洲影院你懂的| 欧美超级乱淫片喷水| 国产欧美日韩中文| 国产欧洲精品视频| 欧美另类精品xxxx孕妇| 在线播放国产一区中文字幕剧情欧美| 国内成人精品一区| 日本高清不卡的在线| 日韩电视剧免费观看网站| 欧美专区中文字幕| 国产欧美一区二区三区视频| 国产精品青草久久久久福利99| 国产亚洲精品久久久久动| 91精品国产自产在线老师啪| 国产精品你懂得| 亚洲国产天堂久久综合| 国产精品美女www爽爽爽视频| 色综合视频网站| 欧美在线欧美在线| 一色桃子一区二区| 伦理中文字幕亚洲| 成人深夜直播免费观看| 97免费视频在线播放| 精品一区二区电影| 国产成人高潮免费观看精品| 欧美一区二区色| 亚洲国产精品成人精品| 国产欧美在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 在线观看精品国产视频| 亚洲女人天堂av| 日韩午夜在线视频| 精品性高朝久久久久久久| 欧美做爰性生交视频| 97超级碰在线看视频免费在线看| 国产国语刺激对白av不卡| 91亚洲午夜在线| 日韩激情片免费| 亚洲性夜色噜噜噜7777| 亚洲成人网在线| 亚洲精品视频免费在线观看| 亚洲成人久久一区| 亚洲精品成人久久| 中文字幕精品影院| 国产成人综合久久| 国内免费精品永久在线视频| 国产精品午夜一区二区欲梦| 亚洲综合社区网| 一色桃子一区二区| 欧美肥老妇视频| 国产欧美日韩专区发布| 国产日韩在线视频| 亚洲成人在线网| 亚洲欧美在线免费观看| 日韩在线观看视频免费| 精品久久在线播放| 91干在线观看| 久久久久久69| 97久久精品在线| 欧美精品免费播放| 一区二区成人精品| 伊人久久精品视频| 欧美一级片久久久久久久| 日本成人精品在线| 欧美福利视频网站| 亚州精品天堂中文字幕| 成人疯狂猛交xxx| 高清在线视频日韩欧美| 国产成+人+综合+亚洲欧洲| 久久久女女女女999久久| 国产高清在线不卡| 国产成人亚洲综合91| 亚洲一区二区久久久久久久| 国产精品免费福利| 久久精品91久久久久久再现| 色播久久人人爽人人爽人人片视av| 中文字幕在线国产精品| 久久这里有精品视频| 亚洲高清久久网| 国产精品高潮在线| 日韩福利视频在线观看| 久久中文字幕国产| 欧美日韩黄色大片| 日韩中文字幕在线观看| 欧美高清一级大片| 91禁外国网站| 国产欧美久久一区二区| 国产精品高潮呻吟久久av无限| 亚洲午夜精品久久久久久久久久久久|