为什么80%的码农都做不了架构师?>>>   

http: // yangzi09150915.blog.163.com/blog/static/32953487201072911410398/

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 解析 创建相关推荐

  1. spring源码深度解析---创建AOP代理之获取增强器

    spring源码深度解析-创建AOP代理之获取增强器 在上一篇的博文中我们讲解了通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这 ...

  2. Java 使用XmlUtil解析Xml

    引言:在日常编码中,我们接触最多的除了JSON外,就是XML格式了,一般而言,我们首先想到的是引入Dom4j包,却不知JDK已经封装有XML解析和构建工具:w3c dom.但是由于这个API操作比较繁 ...

  3. 手敲Mybatis(三)-DataSource的解析创建和使用

    本章节主要是解决通过xml配置可处理sql语句,所以最主要的就是解析xml,一个解析并放入对应数据源对象DataSourceFactory和事务对象TransactionFactory,一个处理Sql ...

  4. Spring源码深度解析(郝佳)-学习-源码解析-创建AOP静态代理实现(八)

    继上一篇博客,我们继续来分析下面示例的 Spring 静态代理源码实现. 静态 AOP使用示例 加载时织入(Load -Time WEaving,LTW) 指的是在虚拟机载入字节码时动态织入 Aspe ...

  5. Spring源码深度解析(郝佳)-学习-源码解析-创建AOP静态代理(七)

    加载时织入(Load-Time Weaving ,LTW) 指的是在虚拟机加载入字节码文件时动态织入Aspect切面,Spring框架的值添加为 AspectJ LTW在动态织入过程中提供了更细粒度的 ...

  6. C++ 使用 tinyxml2 解析创建 xml

    目录 1. github 地址 2. 使用 3. 解析xml demo 4. 注意点 5. 解析效果展示 6.创建xml 7.创建xml效果展示 8. 完整的示例,添加Vector 9. 参考 1. ...

  7. 百度api商圈范围图修改获取坐标数据、点是否在区域范围判断、js解析创建excel

    第一次接触百度api,发此文留作备份 此工具读取excel文件进行数据解析,调用百度api,实现店铺配送区域图的展示效果,以及可以编辑配送区域图获取编辑后的配送范围坐标数据. 1浏览进行excel文件 ...

  8. iOS边练边学--iOS中的XML数据解析

    XML的解析方式 SAX 大小文件都可以 NSXMLParser DOM 最好是小文件 GDataXML NSXMLParser的用法 创建解析器来解析 // 创建XML解析器 NSXMLParser ...

  9. 在Github上搭建Jekyll博客和创建主题

    在Github上搭建Jekyll博客和创建主题 之前本来想展开写的,后来发现Jekyll官网的教程已经非常完善了就没有多写,所以只有这篇. 但是过了这么久,发现很多人还是不清楚怎么搭建,所以这里打算详 ...

最新文章

  1. 高校计算机通识教育目标,美国高校计算机通识教育研究
  2. SSL连接并非完全问题解决
  3. 2017蓝桥杯省赛---java---A---2(9数算式)
  4. POJ-1236 Network of Schools 缩点
  5. 【PHP学习】—get请求传递参数(五)
  6. mysql 5.7 刘,深度解析MySQL 5.7之中文全文检索
  7. 网络游戏中的数据包设计和定义(初论)
  8. 搭建个人论坛网站图文教程
  9. 数据库周刊30丨数据安全法草案将亮相;2020数据库产业报告;云南电网上线达梦;达梦7误删Redo Log;Oracle存储过程性能瓶颈;易鲸捷实践案例……
  10. 论文解读-用于人口流动数据模拟的人口流动模型
  11. java实现即时通讯_java实现WebSocket即时通信
  12. 使用TypeScript重构Axios:让你的项目更加完善
  13. MySQL海量运维管理如何保障京东大促?
  14. Python IDLE 如何设置清屏功能(清屏快捷键,亲测可用)
  15. android设置页面转场特效
  16. 《那一夜》———孙溟㠭书画
  17. 召集令——巴布洛游牧节一日游活动开启啦!
  18. 前端教程:LAMP是什么意思?做什么的?有什么特点?
  19. 2019最新iOS面试题及答案
  20. 【面试准备之】HR面试时100个关键问题

热门文章

  1. [Android] TableLayout
  2. 中级.NET开发人员
  3. SQL Server 2005 数据库邮件 使用要点
  4. 【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )
  5. 【Java 并发编程】线程指令重排序问题 ( 指令重排序规范 | volatile 关键字禁止指令重排序 )
  6. 2018-2019-1 20165236 《信息安全系统设计基础》第4周学习总结
  7. 二周第三次课(3月28日)
  8. 【原创】Struts2.5.12版本中使用通配符*
  9. C# System.Reflection (反射)
  10. cmake编译android平台的libPoco