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);
 }
}

xmlUtil 解析 创建的更多相关文章

  1. Fresco源码解析 - 创建一个ImagePipeline(一)

    在Fresco源码解析 - 初始化过程分析章节中, 我们分析了Fresco的初始化过程,两个initialize方法中都用到了 ImagePipelineFactory类. ImagePipeline ...

  2. [Java多线程]-线程池的基本使用和部分源码解析(创建,执行原理)

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 多线 ...

  3. Docker网络管理机制实例解析+创建自己Docker网络

    实例解析Docker网络管理机制(bridge network,overlay network),介绍Docker默认的网络方式,并创建自己的网络桥接方式,将开发的容器添加至自己新建的网络,提高Doc ...

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

    在上一篇的博文中我们讲解了通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这个类到底做了什么工作来完成AOP的操作呢?首先我们看看 ...

  5. SpringBoot源码解析:创建SpringApplication对象实例

    上篇文章SpringBoot自动装配原理解析中,我们分析了SpringBoot的自动装配原理以及@SpringBootApplication注解的原理,本篇文章则继续基于上篇文章中的main方法来分析 ...

  6. React源码解析——创建更新过程

    一.ReactDOM.render 创建ReactRoot,并且根据情况调用root.legacy_renderSubtreeIntoContainer或者root.render,前者是遗留的 API ...

  7. XML解析方案

    在iOS中,解析XML的手段有很多 苹果原生 NSXMLParser:SAX方式解析,使用简单 第三方框架 libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOM和SAX方式解析 GDa ...

  8. DOM解析XML文件

    1.首先把第三方代码拖进工程 GDataXMLNode.h和GDataXMLNode.m这两个文件放进工程里面 2.引入libxml2库文件 3.将GDataXMLNode.h文件中的这两个东西在工程 ...

  9. iOS -数据库网络之xml解析之第三方解析XML

    1.导入第三方插件(GDalaXMLNode)   2.第三方插件配置   libxml/tree.h 路径   在项目属性中--Bulid Settings中搜索 Search   --Search ...

随机推荐

  1. Shell--变量键盘读取、数组与声明:read,array,declare

    1.read read [-pt] variable -P:后面可以接提示信息 -t:后面可以接等待的秒数,时间到后等待结束 read后面不加任何参数,直接加变量名称,那么就会主动出现一个空白行等待你 ...

  2. DTD 和 Schema简介

    什么是DTD? DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块. 它使用一系列的合法元素来定义文档结构. DTD例子 <?xml version="1.0"? ...

  3. wp8开发时模拟器无法联网解决方法

    关于模拟器无法联网的正常解决方案在网上有很多 这里讲的是我在做测试的时候模拟器无法上网的特殊情况 由于使用的是无线网络 可能有一些差别 过程如图: 启动模拟器 如果之前没有设置过模拟器的交换器则会出现 ...

  4. 【转】Understanding Inversion of Control, Dependency Injection and Service Locator Print

    原文:https://www.dotnettricks.com/learn/dependencyinjection/understanding-inversion-of-control-depende ...

  5. 累加按钮,自加1&&输入两个数字,比较大小

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT-1 获取和设置系统时间

    使用功能块NT_GetTime,NETID填写两个单引号表示本机,START就是一个触发信号,一般的功能块都需要一个上升沿触发执行,最后的输出类型都是让系统自己决定,然后统一把这些变量放到全局变量中( ...

  7. C++ 11 可变模板参数的两种展开方式

    #include <iostream> #include <string> #include <stdint.h> template<typename T&g ...

  8. TFS 设置(转)

    一 参考以下两个链接进行相关软件的安装和用户权限配置: http://www.cnblogs.com/WilsonWu/archive/2011/11/24/2261674.html http://w ...

  9. Android 软键盘的监听(监听高度,是否显示)

    Android官方本身没有提供一共好的方法来对软键盘进行监听,但我们实际应用时.非常多地方都须要针对软键盘来对UI进行一些优化. 下面是整理出来的一个不错的方法.大家能够使用. public clas ...

  10. 10分钟-jQuery-基础选择器

    1.id 选择器 jquery能使用CSS选择器来操作网页中的标签元素.假设你想要通过一个id号去查找一个元素,就能够使用例如以下格式的选择器: $("#my_id") 当中#my ...