xml解析
//获得一个XML文件的解析器 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //解析XML文件生成DOM文档的接口类,以便访问DOM。 DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse( new File(FileName) );遍历DOM文档
//获得Root元素 Element root = document.getDocumentElement(); //获得Root元素的子节点列表 nodelist = root.getChildNodes();或者通过标签来获得element
NodeList body = root.getElementsByTagName("body");假设body下有很多子条目div,则可以一个个取出来单独解析。
<html> <head> </head> <body> <div name="1"> <p id="path">TEMP</p> <p id ="title">....</p> <p id="summary">...</p> <a href="http://....">下载</a> </div> <div name="9"> <p id="name">...</p> <p id='version'>100</p> <details> <summary>...</summary> <img src="http://....png" title="xx" /> </details> <a href="http://..."title="url">下载</a> </div> </body></html>
NodeList divs = ((Element) (body.item(0))).getElementsByTagName("div"); Element div = (Element) divs.item(i);然后通过div.getAttribute("name")来获取div的属性,通过NodeList child = div.getElementsByTagName("p");来获取div的子条目<p>的element,并解析。
int len = child.getLength(); for (int i = 0; i < len; i++) { Element p = (Element) child.item(i); String idVal = p.getAttribute("id"); if (idVal.equals("name")) name = p.getTextContent(); if (idVal.equals("version")) version = p.getTextContent(); ...... }
将DOM文档转化成XML文件
TransformerFactory tfactory = TransformerFactory.newInstance(); Transformer transformer = tfactory.newTransformer(); // 将DOM对象转化为DOMSource类对象,该对象表现为转化成别的表达形式的信息容器。 DOMSource source = new DOMSource(document); // 获得一个StreamResult类对象,该对象是DOM文档转化成的其他形式的文档的容器,可以是XML文件,文本文件,HTML文件。这里为一个XML文件。 StreamResult result = new StreamResult(new File(“text.xml”)); // 调用API,将DOM文档转化成XML文件。 transformer.transform(source,result);需要注意的是,document哪怕是整个xml文档的一部分,例如上例中的某个div,转换得到的仍是整个xml文档。这一块没有继续去看,不知道有没别的解决办法。
Document转化成String
DOMSource source = new DOMSource(doc); StringWriter writer = new StringWriter(); Result result = new StreamResult(writer); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.transform(source,result); String xml = writer.getBuffer().toString();
注:上述方法会返回整个xml的String。
xml转换成数据流
/** * 将一个字符串转化为输入流 */ public static InputStream getStringStream(String sInputString){ if (sInputString != null && !sInputString.trim().equals("")){ try{ ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(sInputString.getBytes()); return tInputStringStream; }catch (Exception ex){ ex.printStackTrace(); } } return null; }
/** * 将一个输入流转化为字符串 */ public static String getStreamString(InputStream tInputStream){ if (tInputStream != null){ try{ BufferedReader tBufferedReader = new BufferedReader(new InputStreamReader(tInputStream,"UTF-8")); StringBuffer tStringBuffer = new StringBuffer(); String sTempOneLine = new String(""); while ((sTempOneLine = tBufferedReader.readLine()) != null){ tStringBuffer.append(sTempOneLine); } return tStringBuffer.toString(); }catch (Exception ex){ ex.printStackTrace(); } } return null; }
这样的话,就可以任意的使用xml,存储和解析xml。
原文链接:https://www.f2er.com/xml/299468.html