XmlUtils.java

package com.vcredit.framework.utils;

import java.io.Writer;

import org.apache.commons.lang3.StringUtils;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
import com.thoughtworks.xstream.io.xml.XppDriver;

/**
* XML工具类
*/
public class XmlUtils {

/**
* 创建XStream
*/
private static XStream createXstream() {
XStream xstream = new XStream(new MyXppDriver(false));
xstream.autodetectAnnotations(true);
return xstream;
}

/**
* 支持注解转化XML
*/
public static String toXML(Object obj, Class<?> cls) {
if (obj == null) {
return null;
}
XStream xstream = createXstream();
xstream.processAnnotations(cls);
return getDefaultXMLHeader() + xstream.toXML(obj);
}

/**
* Object 转化 XML
*/
public static String toXML(Object obj) {
if (obj == null) {
return null;
}
XStream xstream = createXstream();
return getDefaultXMLHeader() + xstream.toXML(obj);
}

/**
* XML转化为JAVA对象
*/
@SuppressWarnings("unchecked")
public static <T> T xml2Obj(String xml, Class<?> cls) {
if (StringUtils.isBlank(xml)) {
return null;
}
XStream xstream = createXstream();
if (cls != null) {
xstream.processAnnotations(cls);
}
return (T) xstream.fromXML(xml);
}

/**
* XML转化为JAVA对象
*/
public static <T> T xml2Obj(String xml) {
return xml2Obj(xml, null);
}

private static String getDefaultXMLHeader() {
return "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
}

/**
*
* @description XppDriver
*
* @author lixining
* @version $Id: XmlUtils.java, v 0.1 2015年8月18日 上午9:46:57 lixining Exp $
*/
public static class MyXppDriver extends XppDriver {
boolean useCDATA = false;

MyXppDriver(boolean useCDATA) {
super(new XmlFriendlyNameCoder("__", "_"));
this.useCDATA = useCDATA;
}

@Override
public HierarchicalStreamWriter createWriter(Writer out) {
if (!useCDATA) {
return super.createWriter(out);
}
return new PrettyPrintWriter(out) {
boolean cdata = true;

@Override
public void startNode(String name, @SuppressWarnings("rawtypes") Class clazz) {
super.startNode(name, clazz);
}

@Override
protected void writeText(QuickWriter writer, String text) {
if (cdata) {
writer.write(cDATA(text));
} else {
writer.write(text);
}
}

private String cDATA(String text) {
return "<![CDATA[" + text + "]]>";
}
};
}
}
}

转载于:https://www.cnblogs.com/muliu/p/6145359.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以处理非常复杂的xml,带节点保存,如节点a下的节点b下的name,调用可用map.get("a").get("b").get("name")如:{ "sectornum": "3", "ReturnResult": "0", "containers": { "container": [ { "shelfhight": "0.086", "cardinfos": { "cardinfo": [ { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框3槽(0)HECM" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框3槽(10)FAN" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框3槽(9)UPEU" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框3槽(7)CMPT" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框3槽(2)HCPM" } ] } }, { "shelfhight": "0.308", "cardinfos": { "cardinfo": [ { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框1槽(2)CRFU" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框1槽(4)CRFU" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框1槽(0)CRFU" } ] } }, { "shelfhight": "0.086" }, { "shelfhight": "0.044" } ] }, "rackname": "HW401C", "asset": { "comments": "", "buydate": "", "assetcardno": "B", "category": "" }, "barcode": "", "version": "", "entity": { "entitycode": "LTJHXYYCX01/XA-HWMACBTS529", "installaddress": "", "entityspec": "BTS", "entityname": "蓝田局华胥电信营业厅CDMA基站/BTS529", "entityid": "901061314", "model": "HUAWEI BTS3900", "vendorname": "HuaWei" }, "ReturnInfo": "成功" }
package com.hexiang.utils; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的节点 * @param attributeName 要取值的属性名称 * @return 要获取的属性的值 * @author HX_2010-01-12 */ public static String getAttribute( Element element, String attributeName ) { return element.getAttribute( attributeName ); } /** * 获取指定节点下的文本 * @param element 要获取文本的节点 * @return 指定节点下的文本 * @author HX_2010-01-12 */ public static String getText( Element element ) { return element.getFirstChild().getNodeValue(); } /** * 解析某个xml文件,并在内存中创建DOM树 * @param xmlFile 要解析的XML文件 * @return 解析某个配置文件后的Document * @throws Exception xml文件不存在 */ public static Document parse( String xmlFile ) throws Exception { // 绑定XML文件,建造DOM树 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document domTree = db.parse( xmlFile ); return domTree; } /** * 获得某节点下的某个子节点(指定子节点名称,和某个属性的值) * 即获取parentElement下名字叫childName,并且属性attributeName的值为attributeValue的子结点 * @param parentElement 要获取子节点的那个父节点 * @param childName 要获取的子节点名称 * @param attributeName 要指定的属性名称 * @param attributeValue 要指定的属性的值 * @return 符合条件的子节点 * @throws Exception 子结点不存在或有多个符合条件的子节点 * @author HX_2008-12-01 */ public static Element getChildElement( Element parentElement, String childName, String attributeName, String attributeValue ) throws Exception { NodeList list = parentElement.getElementsByTagName( childName ); int count = 0; Element curElement = null; for ( int i = 0 ; i < list.getLength() ; i ++ ) { Element child = ( Element )list.item( i ); String value = child.getAttribute( attributeName ); if ( true == value.equals( attributeValue ) ) { curElement =
优化这段代码 public void handForDevice(RequestEvent evt, Device device, Element element) { try { //收到的数据 JSONObject jsonObject = XmlUtils.xmlToBean(element, JSONObject.class); JSONObject request = (JSONObject) jsonObject.get("request"); C2_8Req_ReqCamResState c2_8Req_reqCamResState = JsonUtils.toBean(JsonUtils.toString(request.get("parameters")), C2_8Req_ReqCamResState.class); C2_8Res_ReqCamResState c2_8Res_ReqCamResState = new C2_8Res_ReqCamResState(); List<C2_8Res_Group> c2_8Res_groupList = new ArrayList<>(); C2_8Res_Group c2_8Res_group = new C2_8Res_Group(); List<C2_8Res_Url> c2_8Res_urlList = new ArrayList<>(); C2_8Res_Url c2_8Res_url = new C2_8Res_Url(); for (int i = 0; i < c2_8Req_reqCamResState.getGroup().getURL().size(); i++) { String resid = c2_8Req_reqCamResState.getGroup().getURL().get(i).getResId(); AjaxResult ajaxResult = remoteUserService.getCameraListById(resid); List<DeviceChannel> channerStatueList = JsonUtils.toBean(JsonUtils.toString(ajaxResult.get("data")), DeviceChannel.class); c2_8Res_url.setResId(resid); if (channerStatueList.get(i).getStatus() == 1) { c2_8Res_url.setState("有图像"); } else { c2_8Res_url.setState("无图像"); } c2_8Res_urlList.add(c2_8Res_url); } c2_8Res_group.setURL(c2_8Res_urlList); c2_8Res_groupList.add(c2_8Res_group); c2_8Res_ReqCamResState.setGroup(c2_8Res_groupList); String result = ResponseUtils.getXmlResponse(c2_8Res_ReqCamResState, method, true, null); responseQcrXmlAck(evt, result); } catch (SipException | InvalidArgumentException | ParseException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
最新发布
06-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值