xmlUtil 解析 创建
为什么80%的码农都做不了架构师?>>>
package com.aibi.cmdc.webService;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.AttributesImpl;
public class XmlUtil {
/**
* 取得所有prompts 下prompt及其属性 将其转成list<Map<key,value>>
* @param xmlDoc
* @return
*/
@SuppressWarnings("unchecked")
public static List<Map<String, String>> getPrompts(String xmlDoc) {
List<Map<String, String>> list = new ArrayList<Map<String,String>>();
// 创建一个新的字符串
StringReader read = new StringReader(xmlDoc);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
try {
// 通过输入源构造一个Document
Document doc = sb.build(source);
// 取的根元素
Element root = doc.getRootElement();
// 得到根元素所有子元素的集合
List<Element> oneLevelNodes = root.getChildren();
for ( int i = 0; i < oneLevelNodes.size(); i++) {
Element oneLevelNode = oneLevelNodes.get(i);
if(oneLevelNode.getName().equals("prompts")){
List<Element> prompts = oneLevelNode.getChildren();
for ( int j = 0; j < prompts.size(); j++) {
Map<String, String> promptMap = new HashMap<String, String>();
Element prompt = prompts.get(j);
List<?> attributes =prompt.getAttributes();
for ( int k = 0; k < attributes.size(); k++) {
String attribute = attributes.get(k).toString();
System.out.println( attributes.get(k));
String[] keyAndvalue = attribute.split(":")[1].trim().replace("]", "").split("=");
String key = keyAndvalue[0];
String value = keyAndvalue[1].replaceAll("\"", "");
promptMap.put(key, value);
}
list.add(promptMap);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(list);
return list;
}
/**
* list<Map<key,value>> 转换成 prompts xml字符串形式
* @param prompts
* @return
*/
public static String promptsToXmlString(List<Map<String, String>> prompts){
String resultXmlString ="";
try {
// Result resultXml = new StreamResult(new FileOutputStream("d:\\person.xml"));
// 用来得到XML字符串形式
// 一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串
StringWriter writerStr = new StringWriter();
// 构建转换结果树所需的信息。
Result resultStr = new StreamResult(writerStr);
SAXTransformerFactory factory = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
TransformerHandler tfHandler = factory.newTransformerHandler();
Transformer transformer = tfHandler.getTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // 编码格式是UTF-8
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // 换行
// tfHandler.setResult(resultXml);
tfHandler.setResult(resultStr);
tfHandler.startDocument();
AttributesImpl attr = new AttributesImpl();
tfHandler.startElement("", "", "prompts", attr); // 定义person节点
for (Map<String, String> map : prompts) {
attr.clear();
for(String key : map.keySet()){
attr.addAttribute("", "", key, "", map.get(key));
}
tfHandler.startElement("", "", "prompt", attr); // 定义person节点
tfHandler.endElement("", "", "prompt");
}
tfHandler.endElement("", "", "prompts");
tfHandler.endDocument(); // 结束xml文档
resultXmlString = writerStr.getBuffer().toString();
} catch (Exception e) {
e.printStackTrace();
}
return resultXmlString;
}
public static void main(String[] args) {
List<Map<String, String>> list = new ArrayList<Map<String,String>>();
for ( int i = 0; i < 5; i++) {
Map<String, String> map = new HashMap<String, String>();
map.put("dpId", "DP0");
map.put("id", String.valueOf((Math.random()*10)));
map.put("type", "sapVariable");
map.put("optional", "true");
map.put("technicalName", "S_CPDLB");
map.put("name", "产品大类");
list.add(map);
}
String resultXmlString = promptsToXmlString(list);
System.out.println(resultXmlString);
String xmlString = "<returnResult><errCode>S</errCode><errMsg></errMsg><prompts>" +
"<prompt dpId=\"DP0\" id=\"0\" type=\"sapVariable\" optional=\"true\" technicalName=\"S_CPDLB\" name=\"产品大类\" ></prompt>"+
"<prompt dpId=\"DP0\" id=\"1\" type=\"sapVariable\" optional=\"true\" technicalName=\"0S_MATGR\" name=\"Material group\" ></prompt>"+
"<prompt dpId=\"DP0\" id=\"2\" type=\"sapVariable\" optional=\"true\" technicalName=\"0S_MATERIAL\" name=\"Material\" ></prompt>"+
"<prompt dpId=\"DP0\" id=\"3\" type=\"sapVariable\" optional=\"true\" technicalName=\"0S_SALESORG\" name=\"Sales Organization\" ></prompt>"+
"<prompt dpId=\"DP0\" id=\"4\" type=\"sapVariable\" optional=\"true\" technicalName=\"S_ZPLTYP\" name=\"渠道细类\" ></prompt>"+
"<prompt dpId=\"DP0\" id=\"5\" type=\"sapVariable\" optional=\"true\" technicalName=\"0S_CUSTOMER\" name=\"Customer\" ></prompt>"+
"<prompt dpId=\"DP0\" id=\"6\" type=\"sapVariable\" optional=\"true\" technicalName=\"0I_DAYIN\" name=\"Day Interval\" ></prompt>"+
"<prompt dpId=\"DP0\" id=\"7\" type=\"sapVariable\" optional=\"true\" technicalName=\"0I_DAY\" name=\"DATE\" ></prompt>"+
"</prompts></returnResult>";
getPrompts(xmlString);
}
}
转载于:https://my.oschina.net/sbcagf/blog/782876
xmlUtil 解析 创建相关推荐
- spring源码深度解析---创建AOP代理之获取增强器
spring源码深度解析-创建AOP代理之获取增强器 在上一篇的博文中我们讲解了通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这 ...
- Java 使用XmlUtil解析Xml
引言:在日常编码中,我们接触最多的除了JSON外,就是XML格式了,一般而言,我们首先想到的是引入Dom4j包,却不知JDK已经封装有XML解析和构建工具:w3c dom.但是由于这个API操作比较繁 ...
- 手敲Mybatis(三)-DataSource的解析创建和使用
本章节主要是解决通过xml配置可处理sql语句,所以最主要的就是解析xml,一个解析并放入对应数据源对象DataSourceFactory和事务对象TransactionFactory,一个处理Sql ...
- Spring源码深度解析(郝佳)-学习-源码解析-创建AOP静态代理实现(八)
继上一篇博客,我们继续来分析下面示例的 Spring 静态代理源码实现. 静态 AOP使用示例 加载时织入(Load -Time WEaving,LTW) 指的是在虚拟机载入字节码时动态织入 Aspe ...
- Spring源码深度解析(郝佳)-学习-源码解析-创建AOP静态代理(七)
加载时织入(Load-Time Weaving ,LTW) 指的是在虚拟机加载入字节码文件时动态织入Aspect切面,Spring框架的值添加为 AspectJ LTW在动态织入过程中提供了更细粒度的 ...
- C++ 使用 tinyxml2 解析创建 xml
目录 1. github 地址 2. 使用 3. 解析xml demo 4. 注意点 5. 解析效果展示 6.创建xml 7.创建xml效果展示 8. 完整的示例,添加Vector 9. 参考 1. ...
- 百度api商圈范围图修改获取坐标数据、点是否在区域范围判断、js解析创建excel
第一次接触百度api,发此文留作备份 此工具读取excel文件进行数据解析,调用百度api,实现店铺配送区域图的展示效果,以及可以编辑配送区域图获取编辑后的配送范围坐标数据. 1浏览进行excel文件 ...
- iOS边练边学--iOS中的XML数据解析
XML的解析方式 SAX 大小文件都可以 NSXMLParser DOM 最好是小文件 GDataXML NSXMLParser的用法 创建解析器来解析 // 创建XML解析器 NSXMLParser ...
- 在Github上搭建Jekyll博客和创建主题
在Github上搭建Jekyll博客和创建主题 之前本来想展开写的,后来发现Jekyll官网的教程已经非常完善了就没有多写,所以只有这篇. 但是过了这么久,发现很多人还是不清楚怎么搭建,所以这里打算详 ...
最新文章
- DeepMind推出首个商业产品,30秒内准确诊断眼疾!
- centos7防火墙开放端口
- qt5.5 静态编译 mysql_QT5.3.2+mingw静态编译(生成exe大约14M)
- linux硬链接不能创建目录,为什么硬链接不允许用于目录?
- Java内存使用情况查看工具
- 用户访问共享计算机没有权限,win7共享没有权限访问 共享文件访问权限的方法...
- MacOSX64位机器上gcc编译32位x264静态库
- 66 http的无状态协议和cookie概述
- python常用输入输出の方法
- R树空间索引及其变种
- 2020前端面试(一面面试题)
- 【选手分享】你想知道的比赛思路这里都有!速查收!
- R语言进行的变量相关性显著性检验
- Android逆向Unity3D——XXX快跑破解
- C语言与或非应用案例,与或非(生活中与或非例子)
- 软约束、硬约束、Minimum Snap的轨迹优化方法
- 7-3 敲笨钟 (20 分)Java
- windows x64和x86区别
- mac 备份文件 太大 时间机器_Mac苹果电脑如何从时间机器恢复备份?
- StarGFS海量小文件的高性能存储和保护方案
热门文章
- redis集群安装和java应用
- Liststring里 每个元素重复了多少次
- 约瑟夫问题的循环链表实现
- 打造最好用的离线QQ截图工具 C#
- 关于Ajax 错误:'sys'未定义解决方法.
- MyEclipse-7.5.0版注册码破解及激活操作
- 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
- 【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )
- 【运筹学】运输规划 ( 运输规划问题模型及变化 | 表上作业法引入 )
- 【组合数学】排列组合 ( 排列组合内容概要 | 选取问题 | 集合排列 | 集合组合 )