- package XmlOrString;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.StringReader;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.transform.OutputKeys;
- import javax.xml.transform.Transformer;
- import javax.xml.transform.TransformerConfigurationException;
- import javax.xml.transform.TransformerException;
- import javax.xml.transform.TransformerFactory;
- import javax.xml.transform.dom.DOMSource;
- import javax.xml.transform.stream.StreamResult;
- import org.w3c.dom.Document;
- import org.xml.sax.InputSource;
- import org.xml.sax.SAXException;
- /**
- *
- * @author HaiCheng
- * @version 1.0.0
- * @time 2013-11-06 17:21:00
- * 实现刷String字符串与xml之间的相互转换 使用最原始的javax.xml.parsers 标准的jdk api方式
- */
- public class Begin {
- public static void main(String[] args) throws SAXException,
- IOException, ParserConfigurationException, TransformerException {
- /* String xmlStr = "<?xml version='1.0' encoding='UTF-8' standalone='no'?> " +
- "<world > " +
- " <person id='cheng' Type='china'> " +
- " <name>曹海成</name> " +
- " <age>23</age> " +
- " <sex>男</sex> " +
- " </person> " +
- " <person id='yang' Type='china'> " +
- " <name>曹海洋</name> " +
- " <age>18</age> " +
- " <sex>女</sex> " +
- " </person> " +
- " <person id='long' Type='china'> " +
- " <name>曹海龙</name> " +
- " <age>13</age> " +
- " <sex>男</sex> " +
- " </person> " +
- "</world>"; */
- 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();
- StringReader sr = new StringReader(xmlStr);//得到一个字符流
- /*
- * 查阅JAVA API得到如下资料:
- * SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入。如果有字符流可用,则解析器将直接读取该流,
- * 而忽略该流中找到的任何文本编码声明。
- * 如果没有字符流,但却有字节流,则解析器将使用该字节流,从而使用在 InputSource 中指定的编码,
- * 或者另外(如果未指定编码)通过使用某种诸如 XML 规范 中的算法算法自动探测字符编码。
- * 如果既没有字符流,又没有字节流可用,则解析器将尝试打开到由系统标识符标识的资源的 URI 连接。
- *
- * 以下是InputSource类的四种构造方法
- * 1、public InputSource()零参数默认构造方法。
- * 2、public InputSource(InputStream byteStream)使用字节流创建新的输入源
- * 3、InputSource(Reader characterStream) 使用字符流创建新的输入源。
- * 4、InputSource(String systemId) 使用系统标识符创建新的输入源。
- */
- InputSource is = new InputSource(sr);//获取xml输入源
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//获取 DocumentBuilderFactory 的新实例。此 static 方法创建一个DOM解析器工厂实例
- DocumentBuilder builder=factory.newDocumentBuilder();//获得具体的DOM解析器
- /*
- * //将给定输入源的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。
- * 如果 InputSource 为 null,则抛出一个 IllegalArgumentException。
- */
- Document doc = builder.parse(is);
- /*--------------以上内容已经将String转换成了Document对象,下面的内容是将该对象写成xml文件--------------*/
- TransformerFactory tFactory = TransformerFactory.newInstance();//获取 TransformerFactory 的新实例。此静态方法创建新的工厂实例。
- Transformer transformer = tFactory.newTransformer();
- /** 编码 */
- // transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
- DOMSource source = new DOMSource(doc);
- StreamResult result = new StreamResult(new File("haicheng.xml"));
- transformer.transform(source, result);
- /*--------------然后下面就是再将它们转换成字符串啦----------------*/
- TransformerFactory tf = TransformerFactory.newInstance();
- Transformer t = tf.newTransformer();
- t.setOutputProperty("encoding","GBK");//不明白为什么一定要gbk编码
- /*
- * ByteArrayOutputStream类 api介绍
- *此类实现了一个输出流,其中的数据被写入一个字节数组。
- *缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 检索数据。
- * 该类有两个构造方法:
- * 1、public ByteArrayOutputStream() 创建一个新的字节数组输出流,缓冲区的最初容量是32个字节,缓冲区可随着数据的不断写入自动增大
- * 2、public ByteArrayOutputStream(int size) 跟上一个的区别是这个指定了缓冲区的大小(字节为单位) 如果传参为负值 抛出IllegalArgumentException
- */
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- t.transform(new DOMSource(doc), new StreamResult(bos));
- String xmlStr1 = bos.toString();
- System.out.println("xmlStr1:");
- System.out.println(xmlStr1);
- }
- }
java 基础的String转XML
最新推荐文章于 2023-05-24 21:19:54 发布