XML解析---JAVAEE学习之路
生活随笔
收集整理的這篇文章主要介紹了
XML解析---JAVAEE学习之路
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
解析XML通過JAXP的DOM(DEMO)
廢話不多說,自行測試跟看1.6以上的JDK API
目錄結構:
XML文件內容:
XML代碼:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><書架><書 批發價="30"><書名>java編程思想</書名><作者>James</作者><價格>89</價格></書><書><書名>C Primer</書名><作者>JJ</作者><價格>30</價格></書> </書架>代碼塊:
package com.csa.dom;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; 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.Node; import org.w3c.dom.NodeList;public class Main {public static void main(String[] args) throws Exception {//從Document工廠生產一個BurilderDocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();//通過parse()方法獲取一個對象Document document = documentBuilder.parse("src/Book.xml");//getContentByNameAndIndex(document, "書名", 2);//printByNode(document, -1);//setContentByNodeAndIndex(document, "價格", 2, "30");//insertNewToNodeBefore(document, "書名", 1, createNode(document, "批發價", "20"), false);//appendChildToParent(document, "書", 1, createNode(document, "批發價", "20"));//removeNodeByName(document, "批發價", 1);//opElementByDom(document, "書", 1, "id", "1");}/*** 獲得某個具體的節點內容,通過標簽名字跟位置* @param dom Document對象* @param name 查找的標簽名字* @param index 第幾個標簽*/private static void getContentByNameAndIndex(Document dom, String name, int index){Node item = dom.getElementsByTagName(name).item(index-1);System.out.println(item.getTextContent());}/*** 遍歷所有節點* @param node 要遍歷的節點* @param hi 深度*/private static void printByNode(Node node, int hi){if(node.getNodeType()==Node.ELEMENT_NODE){for(int i=0;i<hi;i++){System.out.printf("\t");}System.out.println(node.getNodeName());}NodeList childNodes = node.getChildNodes();for(int i=0;i<childNodes.getLength();i++){printByNode(childNodes.item(i), hi+1);}}/*** 修改某個元素節點內容* @param dom document對象* @param name 標簽名字* @param index 位置* @param replace 替換內容*/private static void setContentByNodeAndIndex(Document dom, String name, int index, String replace) throws Exception{dom.getElementsByTagName(name).item(index-1).setTextContent(replace);//獲取transform對象Transformer transformer = TransformerFactory.newInstance().newTransformer();//將更改過的dom寫到原來的xml里面transformer.transform(new DOMSource(dom), new StreamResult(dom.getBaseURI()));}/*** 創建一個節點* @param dom document對象* @param nodename 節點名字* @param content 節點內容* @return 一個節點對象*/private static Node createNode(Document dom, String nodename, String content){Node node = dom.createElement(nodename);node.setTextContent(content);return node;}/*** 向指定元素節點中添加子元素節點* @param dom document對象* @param parent 父節點名字* @param index 第幾個父節點* @param newnode 孩子節點*/private static void appendChildToParent(Document dom, String parent, int index, Node newnode) throws Exception{Node item = dom.getElementsByTagName(parent).item(index-1);item.appendChild(newnode);Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.transform(new DOMSource(dom), new StreamResult(dom.getBaseURI()));}/*** 向指定元素節點上增加同級元素節點* @param dom document對象* @param nodename 節點名字* @param index 位置* @param newnode 兄弟節點* @param isbefore 插入在節點之前則true*/private static void insertNewToNodeBefore(Document dom, String nodename, int index, Node newnode, boolean isbefore) throws Exception{Node item = dom.getElementsByTagName(nodename).item(index-1);if(isbefore)item.getParentNode().insertBefore(newnode, item);elseitem.getParentNode().insertBefore(newnode, item.getNextSibling());Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.transform(new DOMSource(dom), new StreamResult(dom.getBaseURI()));}/*** 刪除指定元素節點* @param dom document對象* @param name 刪除的節點名字* @param index 位置*/private static void removeNodeByName(Document dom, String name, int index) throws Exception{Node item = dom.getElementsByTagName(name).item(index-1);item.getParentNode().removeChild(item);Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.transform(new DOMSource(dom), new StreamResult(dom.getBaseURI()));}/*** 操作XML文件屬性* @param dom document對象* @param tagname 標簽名字* @param index 位置* @param key 屬性* @param value 屬性值*/private static void opElementByDom(Document dom, String tagname, int index, String key, String value) throws Exception{Node item = dom.getElementsByTagName(tagname).item(index-1);Element elem = (Element)item;elem.setAttribute(key, value);Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.transform(new DOMSource(dom), new StreamResult(dom.getBaseURI()));} }總結
以上是生活随笔為你收集整理的XML解析---JAVAEE学习之路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021中国企业招聘科技趋势报告
- 下一篇: 深耕一个行业有缺点?