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官网的教程已经非常完善了就没有多写,所以只有这篇. 但是过了这么久,发现很多人还是不清楚怎么搭建,所以这里打算详 ...
最新文章
- 高校计算机通识教育目标,美国高校计算机通识教育研究
- SSL连接并非完全问题解决
- 2017蓝桥杯省赛---java---A---2(9数算式)
- POJ-1236 Network of Schools 缩点
- 【PHP学习】—get请求传递参数(五)
- mysql 5.7 刘,深度解析MySQL 5.7之中文全文检索
- 网络游戏中的数据包设计和定义(初论)
- 搭建个人论坛网站图文教程
- 数据库周刊30丨数据安全法草案将亮相;2020数据库产业报告;云南电网上线达梦;达梦7误删Redo Log;Oracle存储过程性能瓶颈;易鲸捷实践案例……
- 论文解读-用于人口流动数据模拟的人口流动模型
- java实现即时通讯_java实现WebSocket即时通信
- 使用TypeScript重构Axios:让你的项目更加完善
- MySQL海量运维管理如何保障京东大促?
- Python IDLE 如何设置清屏功能(清屏快捷键,亲测可用)
- android设置页面转场特效
- 《那一夜》———孙溟㠭书画
- 召集令——巴布洛游牧节一日游活动开启啦!
- 前端教程:LAMP是什么意思?做什么的?有什么特点?
- 2019最新iOS面试题及答案
- 【面试准备之】HR面试时100个关键问题
热门文章
- [Android] TableLayout
- 中级.NET开发人员
- SQL Server 2005 数据库邮件 使用要点
- 【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )
- 【Java 并发编程】线程指令重排序问题 ( 指令重排序规范 | volatile 关键字禁止指令重排序 )
- 2018-2019-1 20165236 《信息安全系统设计基础》第4周学习总结
- 二周第三次课(3月28日)
- 【原创】Struts2.5.12版本中使用通配符*
- C# System.Reflection (反射)
- cmake编译android平台的libPoco