技术标签: xml
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.dom4j.*;
import java.util.List;
import java.util.Set;
/**
* @author
*/
public class XmlConvert {
/**
* 属性名前缀
*/
private String attributeNamePrefix;
/**
* 文本键名称
*/
private String textKey;
/**
* 移除xml头文件,<?xml version="1.0" encoding="UTF-8"?>
*/
private boolean removeHeader;
public XmlConvert() {
this.setAttributeNamePrefix("@");
this.setTextKey("#text");
this.setRemoveHeader(true);
}
public XmlConvert(String attributeNamePrefix, String textKey) {
this(attributeNamePrefix, textKey, true);
}
public XmlConvert(String attributeNamePrefix, String textKey, boolean removeHeader) {
this.attributeNamePrefix = attributeNamePrefix;
this.textKey = textKey;
this.removeHeader = removeHeader;
}
/**
* json转xml<br/>
* {"abc":["aa","bb"]},此种格式的json串不支持,无根节点; 格式应该为:{"root":{"abc":["aa","bb"]}}
*
* @param json
* @return
*/
public String jsonToXml(String json) {
JSONObject jsonObject = JSON.parseObject(json);
Set<String> keySet = jsonObject.keySet();
if (!keySet.isEmpty() && keySet.size() == 1) {
// 将第一个节点name,作为根节点
String rootName = keySet.iterator().next();
Element rootElement = DocumentHelper.createElement(rootName);
Element element = processObject(jsonObject.get(rootName), rootElement);
String xml = DocumentHelper.createDocument(element).asXML();
if (isRemoveHeader()) {
xml = removeHeader(xml);
}
return xml;
} else {
throw new RuntimeException("The json text is not formatted correctly");
}
}
private Element processObject(Object object, Element element) {
if (object instanceof JSONObject) {
return processJSONObject((JSONObject) object, element);
} else if (object instanceof JSONArray) {
return processJSONArray((JSONArray) object, element, element.getName());
} else {
return processText(object.toString(), element);
}
}
private static Element processText(String text, Element element) {
element.setText(text);
return element;
}
private Element processJSONObject(JSONObject jsonObject, Element element) {
jsonObject.forEach((key, value) -> {
if (key.startsWith(getAttributeNamePrefix())) {
element.addAttribute(key.substring(getPrefixLength()), value.toString());
} else if (key.equals(getTextKey())) {
element.setText(value.toString());
} else {
processValue(element, key, value);
}
});
return element;
}
private void processValue(Element element, String name, Object value) {
if (value instanceof JSONObject) {
Element tempElement = processJSONObject((JSONObject) value, DocumentHelper.createElement(name));
element.add(tempElement);
} else if (value instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) value;
int size = jsonArray.size();
for (int i = 0; i < size; i++) {
processValue(element, name, jsonArray.get(i));
}
} else {
Element temp = processText(value.toString(), DocumentHelper.createElement(name));
element.add(temp);
}
}
private Element processJSONArray(JSONArray jsonArray, Element root, String name) {
int size = jsonArray.size();
for (int i = 0; i < size; ++i) {
processValue(root, name, jsonArray.get(i));
}
return root;
}
/**
* xml转json
*
* @param xml
* @return
*/
public String xmlToJson(String xml) {
try {
Document document = DocumentHelper.parseText(xml);
Element rootElement = document.getRootElement();
JSON json = processObjectElement(rootElement);
JSONObject jsonObject = new JSONObject();
jsonObject.put(rootElement.getName(), json);
return jsonObject.toJSONString();
} catch (DocumentException e) {
throw new RuntimeException("The XML text is not formatted correctly", e);
}
}
private JSONObject processObjectElement(Element element) {
if (element == null) {
return new JSONObject();
}
JSONObject jsonObject = new JSONObject();
List<Attribute> attributes = element.attributes();
for (Attribute attribute : attributes) {
String attributeName = getAttributeNamePrefix() + attribute.getName();
String attributeValue = attribute.getValue();
setOrAccumulate(jsonObject, attributeName, attributeValue);
}
int nodeCount = element.nodeCount();
for (int i = 0; i < nodeCount; i++) {
Node node = element.node(i);
if (node instanceof Text) {
Text text = (Text) node;
setOrAccumulate(jsonObject, getTextKey(), text.getText());
} else if (node instanceof Element) {
setValue(jsonObject, (Element) node);
}
}
return jsonObject;
}
private void setValue(JSONObject jsonObject, Element element) {
if (isObject(element)) {
JSONObject elementJsonObj = processObjectElement(element);
setOrAccumulate(jsonObject, element.getName(), elementJsonObj);
} else {
setOrAccumulate(jsonObject, element.getName(), element.getStringValue());
}
}
private boolean isObject(Element element) {
int attributeCount = element.attributeCount();
if (attributeCount > 0) {
return true;
}
int attrs = element.nodeCount();
if (attrs == 1 && element.node(0) instanceof Text) {
return false;
} else {
return true;
}
}
private void setOrAccumulate(JSONObject jsonObject, String key, Object value) {
if (jsonObject.containsKey(key)) {
Object obj = jsonObject.get(key);
if (obj instanceof JSONArray) {
// 若为数组直接添加
((JSONArray) obj).add(value);
} else {
// 若为非数组,创建数组(已存在的值obj,待添加的值value)
JSONArray jsonArray = new JSONArray();
jsonArray.add(obj);
jsonArray.add(value);
jsonObject.put(key, jsonArray);
}
} else {
jsonObject.put(key, value);
}
}
/**
* 移除xml报文头
*
* @param source
* @return
*/
private String removeHeader(String source) {
return source.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "")
.replaceAll("\r|\n", "");
}
public String getAttributeNamePrefix() {
return attributeNamePrefix;
}
public void setAttributeNamePrefix(String attributeNamePrefix) {
this.attributeNamePrefix = attributeNamePrefix;
}
public String getTextKey() {
return textKey;
}
public void setTextKey(String textKey) {
this.textKey = textKey;
}
public boolean isRemoveHeader() {
return removeHeader;
}
public void setRemoveHeader(boolean removeHeader) {
this.removeHeader = removeHeader;
}
private int getPrefixLength() {
return this.attributeNamePrefix.length();
}
}
import net.sf.json.JSON;
import net.sf.json.JSONSerializer;
import net.sf.json.xml.XMLSerializer;
/**
* @author
*/
public class XmlJsonUtils {
private XmlJsonUtils() {
}
/**
* xml转json,默认忽略根节点
*
* @param xml
* @return
*/
@Deprecated
public static String xmlToJsonStr(String xml) {
return xmlToJsonStr(xml, false);
}
/**
* xml转json
*
* @param xml
* @param forceTopLevelObject 显示(解析)根节点
* @return
*/
@Deprecated
public static String xmlToJsonStr(String xml, boolean forceTopLevelObject) {
XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.setForceTopLevelObject(forceTopLevelObject);
return xmlSerializer.read(xml).toString();
}
/**
* json转xml,默认根节点为o
*
* @param jsonStr
* @return
*/
@Deprecated
public static String jsonToXml(String jsonStr) {
return jsonToXml(jsonStr, "");
}
/**
* json转xml
*
* @param jsonStr
* @param rootName 可设置根节点
* @return
*/
@Deprecated
public static String jsonToXml(String jsonStr, String rootName) {
return jsonToXml(jsonStr, rootName, null);
}
/**
* @param jsonStr
* @param rootName
* @param elementName
* @return
*/
@Deprecated
public static String jsonToXml(String jsonStr, String rootName, String elementName) {
XMLSerializer xmlSerializer = new XMLSerializer();
// 关闭类型提示
xmlSerializer.setTypeHintsEnabled(false);
// 设置根节点名称
xmlSerializer.setRootName(rootName);
xmlSerializer.setElementName(elementName);
JSON json = getJSON(jsonStr);
String xmlStr = xmlSerializer.write(json);
return removeHeaderMessage(xmlStr);
}
/**
* 移除xml报文头
*
* @param source
* @return
*/
@Deprecated
private static String removeHeaderMessage(String source) {
return source.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "").replaceAll("\r|\n", "");
}
/**
* json串转换为json对象
*
* @param jsonStr
* @return
*/
@Deprecated
private static JSON getJSON(String jsonStr) {
return JSONSerializer.toJSON(jsonStr);
}
// 新的xml与json互相转换
/**
* xml转json
*
* @param xml 待转换的xml
* @param attributeNamePrefix xml属性名前缀
* @param textKey xml文本键名称
* @return
*/
public static String xmlToJSON(String xml, String attributeNamePrefix, String textKey) {
XmlConvert xmlConvert = new XmlConvert(attributeNamePrefix, textKey);
return xmlConvert.xmlToJson(xml);
}
/**
* xml转json<br/>
* 默认xml文本键名称为:#text
*
* @param xml 待转换的xml
* @param attributeNamePrefix xml属性名前缀
* @return
*/
public static String xmlToJSON(String xml, String attributeNamePrefix) {
return xmlToJSON(xml, attributeNamePrefix, "#text");
}
/**
* xml转json<br/>
* 默认xml文本键名称为:#text,xml属性名前缀为'@'
*
* @param xml 待转换的xml
* @return
*/
public static String xmlToJSON(String xml) {
return xmlToJSON(xml, "@");
}
/**
* json转xml
*
* @param json 待转换的json串
* @param attributeNamePrefix 转换后的xml属性名前缀
* @param textKey 转换后的xml文本键名称
* @param removeHeader 移除xml头文件
* @return
*/
public static String jsonToXML(String json, String attributeNamePrefix, String textKey, boolean removeHeader) {
XmlConvert xmlConvert = new XmlConvert(attributeNamePrefix, textKey, removeHeader);
return xmlConvert.jsonToXml(json);
}
/**
* json转xml<br/>
* 默认转换后移除xml头文件
*
* @param json 待转换的json串
* @param attributeNamePrefix 转换后的xml属性名前缀
* @param textKey 转换后的xml文本键名称
* @return
*/
public static String jsonToXML(String json, String attributeNamePrefix, String textKey) {
return jsonToXML(json, attributeNamePrefix, textKey, true);
}
/**
* json转xml<br/>
* 默认转换后移除xml头文件,xml文本键名称为#text
*
* @param json 待转换的json串
* @param attributeNamePrefix 转换后的xml属性名前缀
* @return
*/
public static String jsonToXML(String json, String attributeNamePrefix) {
return jsonToXML(json, attributeNamePrefix, "#text", true);
}
/**
* json转xml<br/>
* 默认转换后移除xml头文件,xml文本键名称为#text,属性名前缀为'@'
*
* @param json 待转换的json串
* @return
*/
public static String jsonToXML(String json) {
return jsonToXML(json, "@");
}
}
<!-- xml 解析 start -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<!-- xml解析end -->
文章浏览阅读1.6k次。raft算法_共识算法
文章浏览阅读4k次。使用新安装的 Navicat 第一次连接 Oracle 数据库时,出现如下弹窗。_cannot load oci dll,87
文章浏览阅读7k次,点赞51次,收藏191次。大家好,我是程序员吴师兄,一个坚持在 CSDN 日更原创的程序员。前几天我的一篇文章为什么有人劝别选计算机专业? 上了 CSDN 热榜第一的文章,在此感谢大家的喜爱和 CSDN 的支持,没有看过的同学可以点击蓝色链接前往阅读。发完这篇文章后,有不少的同学私信我,问的最多的一个问题就是:非专业学生如何系统的学习计算机编程?这个问题我在知乎找到一个描述,所以根据这个描述来回答。去年刚毕业,专业是新闻传媒,实习是在一家杂志社做小助理。。。其实小时候就一直对编程非常热爱,一直以来自己有买各种推荐书籍来学,_不学计算机原理可以写程序吗
文章浏览阅读2.6k次,点赞4次,收藏21次。pyltp环境的搭建:在终端安装pyltp时一般会报错:使用wheel方法:下载wheels下面两个文件针对不同的python版本下载一个即可python-3.5: pyltp-0.2.1-cp35-cp35m-win_amd64.whlhttps://pan.baidu.com/s/1Ekx3dHVzt5raXtiuH-S9qwpython-3.6: pyltp-0.2.1-..._pyltp 人名检测
文章浏览阅读1.3k次。学习内容进一步熟悉IIC接口的开发调试,上次工程只是模拟开发,本次将进行实践操作。开发环境vivado 18.3SDKpynq-z2硬件平台搭建参考前文-ZYNQ-实现外设驱动开发-iic接口的光强度传感器GY-30的搭建过程下面给出部分更改操作:这里我们需要把之前选到的MIO改成EMIO同时参考我们的pynq的电路图:进行管脚分配,这里我开始把管脚分配到了AR_SCL和AR_SDA上,试了很多次都不行,然后我就改到了相邻的AR12和A13上,就能正常工作了,这里应该是之前电平一直_zynq模拟iic
文章浏览阅读4.3k次,点赞4次,收藏40次。挖矿病毒特征:“挖矿”病毒是一段恶意代码或者一个软件,一般利用主机或者操作系统的高危漏洞术在局域网内传播,控制电脑进行大量的计算机运算来获取虚拟货币。该病毒会消耗大量的计算机处理资源,常见的就是系统中毒后系统CPU占用接近100%、系统卡顿执行基本命令响应缓慢、系统出现异常进程无法正常kill、系统内存异常占用不稳定等。常见攻击方式:不明邮件附件、文件、连接和网页、不明U盘随意接入、非官方软件和服务器弱口令、高危端口暴露等事件大概处置流程:详细流程、操作命令。_wmic process get caption,commandline /value >> tmp.txt
文章浏览阅读5w次,点赞31次,收藏72次。因为在windows上VSCode使用的默认ssh工具存在实现上的问题,导致一旦我们直接使用默认ssh连接会有报错:”过程试图写入的管道不存在”(The process tried to write to a nonexistent pipe)。那出现这样的问题我们有两种解决办法。解决办法一:安装open ssh,并在设置ProxyCommand时使用安装好的openssh..._过程试图写入的管道不存在
文章浏览阅读918次。用于管理时间和任务活动的工具_dhx gantt
文章浏览阅读477次。大数据文摘出品邀请六位图灵奖得主齐聚,这可能是一场人工智能峰会的最大诚意了。但2020北京智源大会对于人工智能的热情远不止于此。2020年6月21-24日,第二届北京智源大会将邀请包括6位图灵奖获得者、10多位院士在内的上百位人工智能领袖,回顾过去,展望未来,深入系统探讨“人工智能的下一个十年”。先来看看到场嘉宾,阵容之豪华,也难怪业内传言:如果你今年只能参加一场人工智能大会,那么就是它了!6位图灵奖获得者、10多位院士齐聚全球抗疫的大背景下,本次..._图灵奖 获得者名单
文章浏览阅读1.3w次,点赞96次,收藏253次。2018年3月16日,3月24日即要考试!一周的紧促复习时间,是时候来个总结了!加油!!!嵌入式系统嵌入式系统上的软件具有结构精简,代码轻量化,占用存储资源少的特点。嵌入式系统和计算机操作系统的共同特征是:引导加载程序、外设驱动程序、操作系统、文件系统、网络协议栈、图形用户界面、数据库。嵌入式系统应用开发工具的主要目的:提高开发质量,缩短开发周期,降低开发成本。按照软硬件技术的..._powerpc是哈佛结构吗
文章浏览阅读378次。// inet_addr.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include //htonl() 将主机的无符号长整形数转换成网络字节顺序//htons() 将主机的无符号短整形数转换成网络字节顺序//ntohl() 将一个无符号长整形数从网络字节顺序转换为主机字节顺序。//_inet_addr inet_ntoa
文章浏览阅读274次。运气不好,两只1T硬盘先后出现异常(2010年最先降到¥399的日立HDS721010CLA332,以及希捷12代ST31000528AS)。泰国水灾导致的硬盘价暴升,还未恢复,但避免重要的N多硬盘数据不保,还是果段决定换硬盘。最近500G大概¥400,1T大概¥560,2T大概¥700,3T大概¥1000+。500G暂时在岗顶还是出货量最大,适合普通用户装机,但显然最没有...