博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xmlUtil 解析 创建
阅读量:6989 次
发布时间:2019-06-27

本文共 5286 字,大约阅读时间需要 17 分钟。

  hot3.png

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>>
  * 
 xmlDoc
  * 
  
*/
 @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字符串形式
  * 
 prompts
  * 
  
*/
 
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/783013

你可能感兴趣的文章
svg矢量图制作工具(Sketsa SVG Editor) v7.1.1 中文免费版
查看>>
关于ListBox在Grid中无法充满的问题
查看>>
WPF之托盘图标的设定
查看>>
HTTP协议详解(真的很经典)
查看>>
(转)什么是云计算
查看>>
新书推荐:细说PHP(含样章试读)
查看>>
shell常识总结
查看>>
大道至简,职场上做人做事做管理
查看>>
make 参数定义
查看>>
java从字符串中提取数字
查看>>
Android深入浅出系列之服务机制—1.Android中的Service
查看>>
MVC、MVP以及Model2[上篇]
查看>>
数据库隐式类型转换
查看>>
分享5个主流的HTML5开发工具
查看>>
基于Ionic2的开源项目
查看>>
分析Linux内核创建一个新进程的过程【转】
查看>>
周锦民:腾讯在线教育视频互动直播间技术实践
查看>>
[转]UML类图、关系及其JAVA代码
查看>>
PhotoShop算法原理解析系列 - 像素化---》碎片。
查看>>
设计模式之责任链模式
查看>>