- 浏览: 372429 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
云卷云舒灬:
...
Java读取XML配置文件详细总结(dom4j方式) -
ancoa:
多谢博主分享
jQuery实现多选下来框(multiple select) -
aa51513:
图片看不成
java利器---jodd -
wanggang0321:
正在学习中,看完文章了,谢谢写的教程!!!
Tomcat负载均衡和集群环境的搭建 -
yasyas001:
引用
如何实现双(多)语种网站内容的国际化?
XML解析类 package com.supermap.services.components.tilecache.convert; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; public class XMLUtil { /** * 得到第一个非文本的节点 * * @param node * @return */ public static Node getFirstNode(Node node) { NodeList nodelist = node.getChildNodes(); for (int i = 0; i < nodelist.getLength(); i++) { Node childNode = nodelist.item(i); if (childNode instanceof Text) { continue; } return childNode; } return null; } /** * 得到节点下Tag为name的节点 * * @param node * @param name * @return */ public static Node getNodeByTagName(Node node, String name) { Element elem = (Element) node; return elem.getElementsByTagName(name).item(0); } /** * 得到节点下Tag为name的节点集合 * * @param node * @param name * @return 节点集合 */ public static List<Node> getNodesByTagName(Node node, String name) { Element elem = (Element) node; NodeList nodelist = elem.getElementsByTagName(name); List<Node> result = new ArrayList<Node>(); for (int i = 0; i < nodelist.getLength(); i++) { result.add(nodelist.item(i)); } return result; } /** * 判断节点是否为文本节点 <a>string</a> 就是文本节点 * * @param node * @return */ public static Boolean isTextNode(Node node) { NodeList childs = node.getChildNodes(); if (childs.getLength() == 1) { Node child = childs.item(0); if (child instanceof Text) { return true; } } return false; } /** * 节点非文本节点的集合 * * @return */ public static List<Node> getChildsNodes(Node node) { NodeList nodelist = node.getChildNodes(); List<Node> result = new ArrayList<Node>(); for (int i = 0; i < nodelist.getLength(); i++) { Node child = nodelist.item(i); if (child instanceof Text) { continue; } result.add(child); } return result; } @SuppressWarnings("unchecked") /** * 把node转成type类型的对象 * @param node * @param type * @return */ public static <T> T nodeToObject(Node node, Class<?> type) { Object obj = null; if (type.isArray()) {// 考虑数组 Class<?> itemType = type.getComponentType();//级数元素类型 List<Node> childs = getChildsNodes(node); Object array= Array.newInstance(itemType, childs.size()); for(int i =0;i<childs.size();i++){ Node childNode = childs.get(i); Object childValue = nodeToObject(childNode,itemType); Array.set(array, i, childValue); } return (T) array; } if(type.isPrimitive()){//如果是简单类型 return (T) ReflectionUtil.getValue(type, node.getTextContent()); } //list类型 try { obj = type.newInstance();//一般意义的类了 } catch (Exception e) { e.printStackTrace(); return (T) obj; } NodeList childs = node.getChildNodes(); for (int i = 0; i < childs.getLength(); i++) { Node child = childs.item(i); if (child instanceof Text) { continue; } String nodeName = child.getNodeName(); try { if (isTextNode(child)) {// 如果是文本类的 ReflectionUtil.setPropertyValue(obj, nodeName, child.getTextContent()); } else { Class<?> propType = ReflectionUtil.getPropertyType(obj, nodeName); if (propType != null) { Object childValue = nodeToObject(child, propType); ReflectionUtil.setPropertyValue(obj, nodeName, childValue); } } } catch (Exception ex) { ex.printStackTrace(); } } return (T) obj; } }
==============================================
反射类 package com.supermap.services.components.tilecache.convert; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import com.supermap.services.components.commontypes.OutputFormat; public class ReflectionUtil { /** * 给属性赋值[默认包括了字段] * @param obj * @param proName * @param value * @throws IntrospectionException * @throws InvocationTargetException * @throws IllegalAccessException * @throws IllegalArgumentException */ public static void setPropertyValue(Object obj,String proName,Object value) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{ BeanInfo beanInfo= Introspector.getBeanInfo(obj.getClass()); for(PropertyDescriptor prop : beanInfo.getPropertyDescriptors()){ if(prop.getName().equals(proName)){ Class<?> propType =prop.getReadMethod().getReturnType(); Object porpvalue = getValue(propType, value); prop.getWriteMethod().invoke(obj, porpvalue); return ; } } for(java.lang.reflect.Field field : obj.getClass().getFields()){ if( field.getName().equals(proName)){ Object filedValue= getValue(field.getType(),value); field.set(obj, filedValue); return ; } } } /** * 得到属性的类别 * @param obj * @param proName * @return * @throws IntrospectionException */ public static Class<?> getPropertyType(Object obj,String proName) throws IntrospectionException{ BeanInfo beanInfo= Introspector.getBeanInfo(obj.getClass()); for(PropertyDescriptor prop : beanInfo.getPropertyDescriptors()){ if(prop.getName().equals(proName)){ return prop.getReadMethod().getReturnType(); } } for(java.lang.reflect.Field field : obj.getClass().getFields()){ if( field.getName().equals(proName)){ return field.getType(); } } return null; } /** * 把obj转成type类型 * @param type * @param obj * @return */ public static Object getValue(Class<?> type,Object obj){ String className = type.getName(); if(obj.getClass() == type){ return obj; } if(type .equals(Double.class) ||className=="double"){ return Double.parseDouble(obj.toString()); } if(type==Float.class||className=="float"){ return Float.parseFloat(obj.toString()); } if(type==Integer.class||className=="int"){ return Integer.parseInt(obj.toString()); } if(type.equals( String.class)||className=="string"){ return obj.toString(); } if(type.equals(Boolean.class)||className=="boolean"){ return Boolean.parseBoolean(obj.toString()); } if(type.isEnum()){ Class<?>[] params = new Class<?>[1]; params[0] = String.class; try { return type.getDeclaredMethod("valueOf", params).invoke(null, obj.toString()); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } //if(type.equals(Enum)) return null; } public static void main(String[] argc){ OutputFormat format = OutputFormat.BINARY; //OutputFormat.valueOf(name) //format.valueOf(name) OutputFormat myEnum= (OutputFormat) getValue(format.getClass(),"BINARY"); System.out.println(format.toString()); } }
发表评论
-
Java算法—农夫和牛的问题
2013-04-10 16:05 4943问题:一个农夫养了一头牛,三年后,这头牛每年会生出一头牛,生 ... -
Java读取Txt文件
2013-02-28 10:15 2104java读取txt文件的内容 类 ... -
An internal error occurred during: "Building workspace". Java heap space
2013-01-31 15:31 8064今天MyEclipse导入了一个 ... -
java利器---jodd
2013-01-25 17:26 18563网上对Jodd的描述如下: Jodd是一个普通开源Java ... -
Java程序发送邮件的两种方法
2013-01-24 15:17 3970前一段时间我在博客中发表过Java接收解析邮件的程序,今天, ... -
FreeMarker
2012-12-17 15:19 1864在Web应用中,有时需要按照固定的模板将数据导出到Word,如 ... -
Java读取XML配置文件详细总结(dom4j方式)
2012-11-30 16:57 4715最初的想法是不把mysql的连接参数写到程序中,因为每次要修改 ... -
XML的特殊字符
2012-11-30 16:53 32923XML中共有5个特殊的字符,分别是:&<> ... -
JAVA获取各种各样的时间、时间对比 方法汇总
2012-11-28 17:01 2668import java.text.DateFormat; ... -
ftp 主动模式与被动模式
2012-11-23 12:25 2227tp的工作原理 ftp要用到两个tcp连接即要使用两个端口 一 ... -
JAVA中使用FTPClient上传下载
2012-11-16 15:03 3462在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上 ... -
Java获取网页内容s实现自动化(IASI)
2012-11-16 09:58 3348IasiClient package com.iasi. ... -
httpclient 用java调用 的方式获取网页内容,
2012-11-16 09:43 190331. 读取网页(HTTP/HTTPS) ... -
Java实现Zip压缩,解压缩(二)
2012-11-15 11:16 1611今天写了个用java压缩的功能,可以实现对文件和目录的压缩。 ... -
Java实现Zip压缩,解压缩(一)
2012-11-15 10:37 1637package org; import java.i ... -
java 接收、解析邮件实例(三)
2012-11-15 10:20 1353package com.prase.email.four; ... -
java 发送、解析邮件实例(二)
2012-11-14 16:47 1074package com.prase.email.eight ... -
java 发送、解析邮件实例(一)
2012-11-14 16:40 1475package com.prase.email.six; ... -
java发送邮件详细参数解析总结(一)
2012-11-14 16:36 137591.介绍: Java Mail API的开发是SUN为Jav ... -
JavaMail学习笔记(一)、理解邮件传输协议(SMTP、POP3、IMAP、MIME)
2012-11-14 16:33 1725电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之 ...
相关推荐
"java转换xml、list、map和json" 本文主要讲述了Java中将xml、list、map和json之间的转换的相关知识点。 xml和map之间的转换 在Java中,xml和map之间的转换可以通过使用dom4j库来实现。dom4j是一个Java开源库,...
同样的,你可以创建一个解析器来将XML字符串解析成`List`对象,但你需要知道预期的XML结构以便正确地构建对象。 在实际项目中,通常会有更复杂的XML结构,可能包含嵌套的Map和List,这可能需要递归方法或额外的逻辑...
1. **解析XML**:首先,你需要使用Java的内置库如`javax.xml.parsers.DocumentBuilderFactory`来创建一个`DocumentBuilder`实例,然后使用这个实例解析XML字符串或文件,得到一个`Document`对象。这一步骤用于将XML...
在Java开发中,数据交换和存储经常涉及XML、JSON以及List和Map之间的转换。XML(eXtensible Markup Language)是一种用于标记数据的格式,而JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,两者...
如果JSON包含嵌套的对象或数组,它们会被转换为`Map`或`List`。 对于Map取值,你可以使用`get`方法: ```java String key = "exampleKey"; Object value = jsonData.get(key); ``` 如果值是另一个JSON对象或数组...
Java在软件开发中经常涉及到数据格式的转换,如XML、List、Map以及JSON之间的相互转换。这些转换在处理数据交换、API调用或是序列化时非常常见。以下是一些关于如何在Java中进行这些转换的知识点: 1. JSON转换: ...
Castor是基于Java的,它通过生成Java类来解析XML文档,或者将Java对象转换为XML。它的核心功能包括: - **XML到Java对象的绑定(XML Binding)**:将XML文档解析成Java对象模型。 - **Java对象到XML的序列化**:将...
在Java开发中,XML、List、Map和JSON之间的转换是常见的需求。XML用于数据交换,而JSON则常用于前后端的数据传输。以下是一些关于如何在Java中进行这些转换的关键知识点: 1. **XML到Map转换**: - 使用`...
"Java 操作 XML 增删改查" 在 Java 中操作 XML 文档有多种方式,常见的有 DOM、DOM4J、JDOM 和 SAX。每种方式都有其优缺,选择哪种方式取决于具体的项目需求。 DOM DOM(Document Object Model)是 W3C 推荐的一...
4 利用解析类解析并展现到UIView 部分代码如下: @implementation XmlPackage @synthesize obj; @synthesize isList; @synthesize xmlString; @synthesize objectName; @synthesize lvUp; @synthesize root; @...
除了`JsonUtils`之外,`json-lib`库还包括其他工具类,如`JSONArray`, `JSONObject`, `JSONTokener`等,它们分别对应JSON的数组、对象和解析器,提供了丰富的API供开发者使用。 总的来说,`json-lib`的`JsonUtils`...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
Java集合框架包括List、Set、Map等接口和实现,为处理对象数组提供了强大支持。此外,Java SE(标准版)和Java EE(企业版)还提供了丰富的API,如Swing用于桌面应用,Spring框架用于企业级开发。 对于初学者,理解...
Java中的名称空间解析是处理XML文档时不可或缺的一部分,特别是在涉及XPath表达式时。XML名称空间用于区分具有相同本地名称但属于不同来源的元素和属性,防止命名冲突。名称空间通过URI(统一资源标识符)定义,并...
然而没有办法将不同的集合类类型分别采用不同的转换方法.因为没有办法完全自动进行转换,我们可以应用dwr.xml文件的special signatures syntax配置部分设置类型的转换处理过程. 2.5 DOM Objects DWR 自动将DOM、DOM4J...
3. **数据类型映射**:JSON中的数据类型与Java中的不完全相同,如JSON的数组对应Java的List或Array,JSON对象对应Java的Map。库如Jackson会自动进行类型转换。 4. **复杂JSON处理**:对于包含嵌套结构或复杂关系的...
Java API,全称为Java应用程序接口,是Java编程语言的核心组成部分,包含了各种类库、接口和异常,为开发者提供了丰富的功能,使得开发Java程序变得更加高效和便捷。本资料“java常用API-适合初学者”旨在帮助初学者...
在Android开发中,XML是一种常见的数据格式,用于存储和传输...对于大型XML文件,可能需要考虑使用SAX(简单API for XML)或StAX(Streaming API for XML)等基于事件的解析器,它们以更节省内存的方式处理XML数据。
JDOM是一个针对Java平台的XML API,它提供了一个与Java集合类(如List和Map)紧密集成的XML模型。JDOM使用SAX或DOM作为底层解析器,但提供了更简单的接口。在JDOM中,你可以直接通过元素、属性和文本节点来操作XML...