文档章节

xmlUtil 解析 创建

穿林度水
 穿林度水
发布于 2016/11/07 14:27
字数 654
阅读 6
收藏 0
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);
 }
}

© 著作权归作者所有

穿林度水
粉丝 0
博文 250
码字总数 167120
作品 0
海淀
程序员
私信 提问
java 解析xml,factory对象可以重用吗?

in = new FileInputStream(file);DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();domFactory.setNamespaceAware(true); // never forget this!DocumentBuilder ......

一只小桃子
2014/10/21
88
2
dom4j操作xml时的乱码与格式化

Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。(Hibernate用此项目来解析hbm映射文件) 下面的java代码演示如何写xml...

xinlll
2012/12/30
231
1
Java dom4j saxReader解析xml

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import o......

艺晨光
2016/06/07
0
0
Java 工具集 Hutool 4.0.9 发布,bug 修复

Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以“甜甜的”。Hutool最初是我项目中“util”包的一个整理,后来慢慢积累并加入更多非...

路小磊
2018/03/29
700
6
自己整合优化的一个Android框架

我封装的这个框架暂且就叫它Wonder框架吧, Wonder惊奇的意思,意思是让人眼前一亮。改变了原先我们喜欢重复复制粘贴代码的坏习惯,浪费了时间的同时还不好管理代码。 废话不说,咱们先看看简...

peter_wang2012
2015/09/14
405
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部