文档章节

Java 读取XML

 糊不糊涂
发布于 2015/06/11 19:33
字数 283
阅读 9
收藏 1

package com.utility;


import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.lang.reflect.Field;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;


import org.apache.log4j.Logger;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.Node;

import org.dom4j.io.SAXReader;



/**

 * 文件配置读取类

 * @author zhangyang 20150603

 *

 */

public class XmlFile {


private static String section="Section";

private static String entry="Entry";

/**

* 获取Document对象

* @param xmlfilepath

* @return

* @throws DocumentException

*/

public static Document getDocument(String xmlfilepath) throws DocumentException{

SAXReader reader = new SAXReader();

Document document = null;

InputStream is=null;

is =ClassPathUtils.getWebrootInputStream(xmlfilepath);

if(is==null){

System.out.println("Error: Read file "+xmlfilepath+" to inputStream is failed!");

return document;

}

document=reader.read(is);

return document;

}

/**

* 获取对象数组

* @param customizerType

* @return

* @throws InstantiationException

* @throws IllegalAccessException

*/

public static List getObjectList(Element root,Class customizerType) throws InstantiationException, IllegalAccessException{

List customizerList=null;

try{

String sectionNode=section+"[@name='"+customizerType.getSimpleName()+"']";

Field[] fields= customizerType.getFields();

customizerList=new ArrayList();

List<Node> list= root.selectNodes(sectionNode);

System.out.println(customizerType.getSimpleName()+":"+list.size());

for(int i=0;i<list.size();i++){

Object customizer= customizerType.newInstance();

if(customizer!=null){

for (Field field : fields) {

Node node= list.get(i);

String entryStr= entry+"[@name='"+field.getName()+"']";

Node entryNode=node.selectSingleNode(entryStr);

if(entryNode!=null){

if(field.getType().equals(String.class)){

field.set(customizer, entryNode.getText());

}

}

}

}

customizerList.add(customizer);

}

}

catch(Exception e){


throw e;

}

return customizerList;

}


/**

* 读取xml

* @param customizer

* @throws IllegalArgumentException

* @throws IllegalAccessException

*/

public static void getFieldValue(Element root,Object customizer) throws IllegalArgumentException, IllegalAccessException{

try{

Class customizerType=customizer.getClass();

Field[] fields= customizerType.getFields();


String sectionNode=section+"[@name='"+customizerType.getSimpleName()+"']";


Node node= root.selectSingleNode(sectionNode);

for (Field field : fields) {

Node entryNode=node.selectSingleNode(entry+"[@name='"+field.getName()+"']");

if(entryNode!=null){

if(field.getType().equals(String.class)){

field.set(customizer, entryNode.getText());

}

}

}

}

catch(Exception e){


throw e;

}

}


}


© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 1
码字总数 283
作品 0
朝阳
程序员
私信 提问
JAXB Annotation初步使用

JAXB(Java Architecture for XML Binding简称JAXB)允许Java开发人员将Java类映射为XML表示方式。JAXB提供两种主要特性:将一个Java对象序列化为XML,以及反向操作,将XML解析成Java对象。换...

秋风醉了
2014/07/02
0
0
关于java读取xml的问题

关于用java读取xml, Java是只能用来读xml的值么? 比如,xml中有这么一句 我用sax解析可分别读出 abc >25 但我现在要在Java中给定一个abc的值,比如abc=67,要怎么利用读取xml的限制条件来判...

Yaki
2015/08/08
187
2
本人是phper,对java略懂,如何学好spring+hibernate

本人从事php、python多年,当然对java语法略懂,但没有真实用java开发过产品, 近期公司可能启动java开发oa,所以想学一下java。但对java的一些xml配置文件非常恶心,啰嗦到不得了,看了struc...

qycms_cn
2011/12/14
1K
14
求教再web.xml里配置的spring启动和配置文件路径如何在java代码中实现

我现在项目是web的但只用了web.xml这一个和web相关的,我想把项目达成jar使用,让它变为java项目,我如何在java中实现以下web.xml配置实现的功能呀 求教 我在java的main方法中读取配置文件却...

开源中国技术顾问
2015/06/30
3K
2
Android 读取元素的数据

Android 读取<meta-data>元素的数据 在AndroidManifest.xml中,<meta-data>元素可以作为子元素,被包含在<activity>、<application> 、<service>和<receiver>元素中,但不同的父元素,在应用......

Simpleness
2012/07/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

基于 Docker 快速部署多需求 Spark 自动化测试环境

引言 在进行数据分析时,Spark 越来越广泛的被使用。在测试需求越来越多、测试用例数量越来越大的情况下,能够根据需求快速自动化部署 Spark 环境、快速完成所有测试越来越重要。 本文基于 ...

呐呐丶嘿
13分钟前
0
0
支付宝APP支付之查看支付宝商户ID

1、登录支付宝蚂蚁金服开放平台 2、查看账号详情,选择合作伙伴管理,账户管理,查看角色身份,此处的PID就是商户ID 3、点击秘钥管理,可查看绑定的相关应用及其APPID等信息

Code辉
16分钟前
0
0
崛起于Springboot2.X之通讯WebSocket(40)

技术简介:Springboot2.0.3+freemaker+websocket 1、添加pom依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

木九天
24分钟前
1
0
Java常用四大线程池用法以及ThreadPoolExecutor详解

为什么用线程池? 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处-理效率 2.线程并发数量过多,抢占系统资源从而导致阻塞 3.对线程进行一些简单的管理 在Java中...

孟飞阳
26分钟前
1
0
Netty+Websocket 实现一个简易聊天室

后台代码 /** * 服务端 */public class ChatServer {public static void main(String[] args) throws Exception {int port=8080; //服务端默认端口new ChatServer().bind...

这很耳东先生
28分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部