小编给大家分享一下java对XML文件解析、增加和删除节点的案例,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
1、java代码:
主要采用dom来进行操作
package test; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; 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.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.SAXException; public class XmlOprate { Document doc; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder; NodeList imags; String path; public NodeList getImags() { return imags; } public void setImags(NodeList imags) { this.imags = imags; } /** * 构造方法 * @param path:xml文件的路径 * @param nodes:要解析的xml节点名称 */ public XmlOprate(String path) { super(); this.path = path; System.out.println(System.getProperty("user.dir")); } /** * 解析XML * @param path */ public void readXml(){ try { builder = factory.newDocumentBuilder(); Document doc=builder.parse(path); doc.normalize(); NodeList imags =doc.getElementsByTagName("imags"); this.setImags(imags); for (int i=0;i<imags.getLength();i++){ Element link=(Element) imags.item(i); System.out.print("title: "); System.out.println(link.getElementsByTagName("title").item(0).getFirstChild().getNodeValue()); System.out.print("URL: "); System.out.println(link.getElementsByTagName("url").item(0).getFirstChild().getNodeValue()); System.out.print("imgsrc: "); System.out.println(link.getElementsByTagName("imgsrc").item(0).getFirstChild().getNodeValue()); System.out.println(); } }catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * addCode * @param path */ public void addXmlCode(String imgsrc,String title,String url){ try { builder = factory.newDocumentBuilder(); Document doc=builder.parse(path); doc.normalize(); Text textseg; Element imag=doc.createElement("imags"); Element linkimgsrc=doc.createElement("imgsrc"); textseg=doc.createTextNode(imgsrc); linkimgsrc.appendChild(textseg); imag.appendChild(linkimgsrc); Element linktitle=doc.createElement("title"); textseg=doc.createTextNode(title); linktitle.appendChild(textseg); imag.appendChild(linktitle); Element linkurl=doc.createElement("url"); textseg=doc.createTextNode(url); linkurl.appendChild(textseg); imag.appendChild(linkurl); doc.getDocumentElement().appendChild(imag); TransformerFactory tFactory =TransformerFactory.newInstance(); Transformer transformer; transformer = tFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new java.io.File(path)); transformer.transform(source, result); }catch(Exception e){ } } /** * delete xml code * @param path */ public void delXmlCode(){ try { builder = factory.newDocumentBuilder(); doc=builder.parse(path); doc.normalize(); NodeList imags =doc.getElementsByTagName("imags"); Element elink=(Element) imags.item(0); elink.removeChild(elink.getElementsByTagName("imgsrc").item(0)); elink.removeChild(elink.getElementsByTagName("title").item(0)); elink.removeChild(elink.getElementsByTagName("url").item(0)); doc.getFirstChild().removeChild(elink); TransformerFactory tFactory =TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new java.io.File(path)); transformer.transform(source, result); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } }
2、xml部分
<?xml version="1.0" encoding="UTF-8" ?> <root> <imags> <imgsrc>images/ad-01.jpg</imgsrc> <title>胡志明市</title> <url>https://cache.yisu.com/upload/information/20200318/103/26473.jpg</imgsrc> <title>香港2</title> <url>http://torchrelay.beijing2008.cn/cn/journey/hongkong/</url> </imags> </root>
3、总结:
看对xml操作的三个方法(读、写、删),他们的初始化语句都相同:
builder = factory.newDocumentBuilder(); Document doc=builder.parse(path); doc.normalize();
开始我打算把这部分相同的部分拿出来写在构造方法中,但是在测试中发现,这样总是会报空指针的错误(搞了我好久);
而只是把
builder = factory.newDocumentBuilder();
放到builder的初始化语句中的时候,读没问题,但是当写或者删的时候也会报错;
所以就写成现在这样了,感觉有点乱乱的,但也没想到什么好的方法,就先贴到这里了,以后可能会用得着
看完了这篇文章,相信你对java对XML文件解析、增加和删除节点的案例有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。