加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于XML字符串和XML Document之间的转换

发布时间:2020-12-16 06:02:56 所属栏目:百科 来源:网络整理
导读:在web项目中,XML作为一种重要的数据存储和传输介质,被广泛使用。XML文件,XML字符串和XML Document对象是XML存在的三种形式,XML文件无需多言,和普通的文本并无二致;倒是在做一般的XML数据交换过程中,经常要使用XML字符串和XML Document对象,因此在这
在web项目中,XML作为一种重要的数据存储和传输介质,被广泛使用。XML文件,XML字符串和XML Document对象是XML存在的三种形式,XML文件无需多言,和普通的文本并无二致;倒是在做一般的XML数据交换过程中,经常要使用XML字符串和XML Document对象,因此在这两种形式之间进行转化成为了使用XML的必备技术。在所有操控XML的技术中,都提供了这两种形式XML之间的转换方法。
下面我就各种XML技术对此问题的解决方法做个总结,和大家分享,也方便自己今后查阅。
一,使用JDOM(这是我最常使用的一种技术)
1.字符串转Document对象
String xmlStr = ".....";
StringReader sr = new StringReader(xmlStr);
InputSource is = new InputSource(sr);
Document doc = ( new SAXBuilder()).build(is);
2.Document对象转字符串
Format format = Format.getPrettyFormat();
format.setEncoding( "gb2312"); //设置xml文件的字符为gb2312,解决中文问题
XMLOutputter xmlout = new XMLOutputter(format);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
xmlout.output(doc,bo);
String xmlStr = bo.toString();
注:Document为org.jdom.Document

二,使用最原始的javax.xml.parsers,标准的jdk api
1.字符串转Document对象
String xmlStr = "......";
StringReader sr = new StringReader(xmlStr);
InputSource is = new InputSource(sr);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc = builder.parse(is);
2.Document对象转字符串
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty( "encoding","GB23121"); //解决中文问题,试过用GBK不行
ByteArrayOutputStream bos = new ByteArrayOutputStream();
t.transform( new DOMSource(doc), new StreamResult(bos));
String xmlStr = bos.toString();
注:Document为org.w3c.dom.Document

三,使用dom4j(这是最简单的方法)
1.字符串转Document对象
String xmlStr = "......";
Document document = DocumentHelper.parseText(xmlStr);
2.Document对象转字符串
Document document = ...;
String text = document.asXML();
注:Document为org.dom4j.Document

四,在JavaScript中的处理
1.字符串转Document对象
var xmlStr = ".....";
var xmlDoc = new ActiveXObject( "Microsoft.XMLDOM");
xmlDoc.async= false;
xmlDoc.loadXML(xmlStr);
//可以处理这个xmlDoc了
var name = xmlDoc.selectSingleNode( "/person/name");
alert(name.text);
2.Document对象转字符串
var xmlDoc = ......;
var xmlStr = xmlDoc.xml
注:Document为javaScript版的XMLDOM

本文出自 “夜狼” 博客,请务必保留此出处http://www.52php.cn/article/p-hmdoxujm-qw.html

xml格式字符串与java对象互转

Java代码
  1. importjava.lang.reflect.Field;
  2. importjava.util.List;
  3. importcom.thoughtworks.xstream.XStream;
  4. publicclassXmlUtil{
  5. //所有需要注册的类的配置,
  6. publicstaticfinalStringCONFIGFILE=newGetClassPath()
  7. .getMyConfigPath()
  8. +"/xml.prop";
  9. privatestaticXStreamxs=null;
  10. privatestaticXmlUtilxmlUtil=null;
  11. privateXmlUtil(){
  12. try{
  13. //获取所有需要与处理的java完整名
  14. Listlist=FileUtil.readFile(CONFIGFILE);
  15. //初始化xs
  16. xs=alias(list);
  17. }catch(ClassNotFoundExceptione){
  18. e.printStackTrace();
  19. }
  20. }
  21. /**
  22. *获得实例
  23. *@return
  24. */
  25. publicstaticsynchronizedXmlUtilgetInstance(){
  26. if(null==xmlUtil){
  27. xmlUtil=newXmlUtil();
  28. }
  29. returnxmlUtil;
  30. }
  31. /**
  32. *根据类名做反射
  33. *
  34. *@paramlist
  35. *类完整名
  36. *@return
  37. *@throwsClassNotFoundException
  38. */
  39. publicXStreamalias(Listlist)throwsClassNotFoundException{
  40. XStreamxs=newXStream();
  41. for(inti=0;i<list.size();i++){
  42. Objectobj;
  43. try{
  44. obj=Class.forName((String)list.get(i)).newInstance();
  45. Classzz=obj.getClass();
  46. aliasAtt(xs,zz);
  47. }catch(InstantiationExceptione){
  48. e.printStackTrace();
  49. }catch(IllegalAccessExceptione){
  50. e.printStackTrace();
  51. }
  52. }
  53. returnxs;
  54. }
  55. /**
  56. *对类进行xml解析配置
  57. *
  58. *@paramxs
  59. *@paramz
  60. *class对象
  61. */
  62. publicvoidaliasAtt(XStreamxs,Classz){
  63. if(null==z){
  64. return;
  65. }
  66. //类名注册
  67. xs.alias(z.getSimpleName(),z);
  68. Field[]field=z.getDeclaredFields();
  69. //类中成员变量注册,继承的不注册
  70. for(inti=0;i<field.length;i++){
  71. xs.aliasField(field[i].getName(),z,field[i].getName());
  72. }
  73. }
  74. /**
  75. *xml格式字符串转换为对象
  76. *@paramstr
  77. *@return
  78. */
  79. publicObjectxmlToObject(Stringstr){
  80. returnxs.fromXML(str);
  81. }
  82. /**
  83. *对象转换为xml格式字符串
  84. *@paramobj
  85. *@return
  86. */
  87. publicStringobjToXml(Objectobj){
  88. returnxs.toXML(obj);
  89. }
  90. }
  91. FileUtil.readFile()方法如下
  92. /**
  93. *读取文件
  94. *
  95. *@paramfilePath
  96. *文件完整名
  97. *@return文件内容
  98. *@throwsIOException
  99. */
  100. publicstaticListreadFile(StringfilePath){
  101. Listlist=newArrayList();
  102. FileInputStreamfs=null;
  103. InputStreamReaderisr=null;
  104. BufferedReaderbr=null;
  105. try{
  106. fs=newFileInputStream(filePath);
  107. isr=newInputStreamReader(fs);
  108. br=newBufferedReader(isr);
  109. Stringdata="";
  110. while((data=br.readLine())!=null){
  111. list.add(data.trim());
  112. }
  113. }catch(IOExceptione){
  114. e.printStackTrace();
  115. }finally{
  116. try{
  117. if(br!=null)
  118. br.close();
  119. if(isr!=null)
  120. isr.close();
  121. if(fs!=null)
  122. fs.close();
  123. }catch(IOExceptione){
  124. e.printStackTrace();
  125. }
  126. }
  127. returnlist;
  128. }
  129. Test
  130. Printdatapd=newPrintdata();
  131. pd.setPrintFileList(printFileList);
  132. pd.setAuto("1");
  133. pd.setBillReceiver("billReceiver");
  134. pd.setCustId("cust_id");
  135. pd.setYear("2011");
  136. pd.setMonth("11");
  137. Listlist=FileUtil.readFile(XmlUtil.CONFIGFILE);
  138. XmlUtilxmlUtil=XmlUtil.getInstance();
  139. Stringxml=xmlUtil.objToXml(pd);//对象至xml
  140. System.out.println(xml);
  141. Printdataobj=(Printdata)xmlUtil.xmlToObject(xml);//xml至对象


需要的jar包见附件

  • xpp3_min-1.1.4c.jar (24.4 KB)
  • 下载次数: 51
  • xstream-1.3.jar (401.5 KB)
  • 下载次数: 52

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读