java 基础的String转XML

  1. package XmlOrString;  
  2.   
  3.   
  4. import java.io.ByteArrayOutputStream;  
  5. import java.io.File;  
  6. import java.io.FileWriter;  
  7. import java.io.IOException;  
  8. import java.io.StringReader;  
  9. import javax.xml.parsers.DocumentBuilder;  
  10. import javax.xml.parsers.DocumentBuilderFactory;  
  11. import javax.xml.parsers.ParserConfigurationException;  
  12. import javax.xml.transform.OutputKeys;  
  13. import javax.xml.transform.Transformer;  
  14. import javax.xml.transform.TransformerConfigurationException;  
  15. import javax.xml.transform.TransformerException;  
  16. import javax.xml.transform.TransformerFactory;  
  17. import javax.xml.transform.dom.DOMSource;  
  18. import javax.xml.transform.stream.StreamResult;  
  19. import org.w3c.dom.Document;  
  20. import org.xml.sax.InputSource;  
  21. import org.xml.sax.SAXException;  
  22. /** 
  23.  *  
  24.  * @author HaiCheng 
  25.  * @version 1.0.0 
  26.  * @time  2013-11-06 17:21:00 
  27.  * 实现刷String字符串与xml之间的相互转换 使用最原始的javax.xml.parsers  标准的jdk api方式    
  28.  */  
  29. public class Begin {  
  30.     public static void main(String[] args) throws SAXException,   
  31.     IOException, ParserConfigurationException, TransformerException {  
  32.           
  33.        /* String xmlStr = "<?xml version='1.0' encoding='UTF-8' standalone='no'?>  " +  
  34.                         "<world >         " +  
  35.                         "   <person id='cheng' Type='china'>        " +  
  36.                         "       <name>曹海成</name>  " +  
  37.                         "       <age>23</age>  " +  
  38.                         "       <sex>男</sex>  " +  
  39.                         "   </person>       " +  
  40.                         "   <person id='yang' Type='china'>     " +      
  41.                         "       <name>曹海洋</name>  " +  
  42.                         "       <age>18</age>  " +  
  43.                         "       <sex>女</sex>  " +  
  44.                         "   </person>   " +  
  45.                         "   <person id='long' Type='china'>   " +       
  46.                         "       <name>曹海龙</name>  " +  
  47.                         "       <age>13</age>  " +  
  48.                         "       <sex>男</sex>  " +  
  49.                         "   </person>         " +  
  50.                         "</world>";  */
  51.                 StringBuffer condition = new StringBuffer();
    condition.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
    .append("<personList>")
    .append("<name>"+userIds+"</name>").append("<age>25</age>")
    .append("<name>"+userIds+"</name>").append("<age>26</age>")
    .append("<name>"+userIds+"</name>").append("<age>27</age>")
    .append("</personList>");
    String xmlStr = condition.toString();
  52.         StringReader sr = new StringReader(xmlStr);//得到一个字符流  
  53.         /* 
  54.          * 查阅JAVA API得到如下资料: 
  55.          *      SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入。如果有字符流可用,则解析器将直接读取该流, 
  56.          *      而忽略该流中找到的任何文本编码声明。 
  57.          *      如果没有字符流,但却有字节流,则解析器将使用该字节流,从而使用在 InputSource 中指定的编码, 
  58.          *      或者另外(如果未指定编码)通过使用某种诸如 XML 规范 中的算法算法自动探测字符编码。 
  59.          *      如果既没有字符流,又没有字节流可用,则解析器将尝试打开到由系统标识符标识的资源的 URI 连接。 
  60.          *  
  61.          * 以下是InputSource类的四种构造方法 
  62.          * 1、public InputSource()零参数默认构造方法。  
  63.          * 2、public InputSource(InputStream byteStream)使用字节流创建新的输入源 
  64.          * 3、InputSource(Reader characterStream) 使用字符流创建新的输入源。 
  65.          * 4、InputSource(String systemId) 使用系统标识符创建新的输入源。 
  66.          */  
  67.         InputSource is = new InputSource(sr);//获取xml输入源  
  68.         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//获取 DocumentBuilderFactory 的新实例。此 static 方法创建一个DOM解析器工厂实例  
  69.         DocumentBuilder builder=factory.newDocumentBuilder();//获得具体的DOM解析器  
  70.         /* 
  71.          * //将给定输入源的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。 
  72.          * 如果 InputSource 为 null,则抛出一个 IllegalArgumentException。  
  73.          */  
  74.         Document doc = builder.parse(is);  
  75.           
  76.         /*--------------以上内容已经将String转换成了Document对象,下面的内容是将该对象写成xml文件--------------*/  
  77.           
  78.         TransformerFactory tFactory = TransformerFactory.newInstance();//获取 TransformerFactory 的新实例。此静态方法创建新的工厂实例。  
  79.         Transformer transformer = tFactory.newTransformer();  
  80.         /** 编码 */  
  81.         // transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");  
  82.         DOMSource source = new DOMSource(doc);  
  83.           
  84.         StreamResult result = new StreamResult(new File("haicheng.xml"));  
  85.         transformer.transform(source, result);  
  86.           
  87.         /*--------------然后下面就是再将它们转换成字符串啦----------------*/  
  88.           
  89.         TransformerFactory   tf   =   TransformerFactory.newInstance();  
  90.         Transformer t = tf.newTransformer();  
  91.         t.setOutputProperty("encoding","GBK");//不明白为什么一定要gbk编码  
  92.           
  93.         /* 
  94.          * ByteArrayOutputStream类 api介绍 
  95.          *此类实现了一个输出流,其中的数据被写入一个字节数组。 
  96.          *缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 检索数据。 
  97.          * 该类有两个构造方法: 
  98.          * 1、public ByteArrayOutputStream()  创建一个新的字节数组输出流,缓冲区的最初容量是32个字节,缓冲区可随着数据的不断写入自动增大 
  99.          * 2、public ByteArrayOutputStream(int size)  跟上一个的区别是这个指定了缓冲区的大小(字节为单位)  如果传参为负值 抛出IllegalArgumentException 
  100.          */  
  101.         ByteArrayOutputStream   bos   =   new   ByteArrayOutputStream();  
  102.         t.transform(new DOMSource(doc), new StreamResult(bos));  
  103.         String xmlStr1 = bos.toString();  
  104.         System.out.println("xmlStr1:");  
  105.         System.out.println(xmlStr1);  
  106.     }  
  107. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值