国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Strus2第一次課:dom4j操作xml

2019-11-14 22:30:34
字體:
供稿:網(wǎng)友
Strus2第一次課:dom4j操作xml

先從底層的xml操作技術(shù)記錄:

 當(dāng)我們新建一個項(xiàng)目,什么架包都沒加入的時候,java提供了 org.w3c.dom給我們操作xml里面的元素

  import org.w3c.dom.Document;

  import org.w3c.dom.Element;

  import org.w3c.dom.Node;

  import org.w3c.dom.NodeList;

  并且提供了javax.xml來讀取xml、對xml進(jìn)行增刪改操作

  如何讀取一個xml文件:

  導(dǎo)包:

  1. javax.xml.parsers.DocumentBuilderFactory;//文本建造工廠
  2. javax.xml.parsers.DocumentBuilder;   //文本建造者
  3. org.w3c.dom.Document; //文本  

  

  DocumentBuilderFactory factory=null;

  DocumentBuilder builder=null;

  Document doc=null;

  

try {            factory=DocumentBuilderFactory.newInstance();            builder=factory.newDocumentBuilder();            doc=builder.parse("練習(xí)/

上面的代碼:從工廠new一個文本建造者,由這個建造者去拿xml文件,n(*≧▽≦*)n太面向?qū)ο罅耍?/p>


獲取xml里面的節(jié)點(diǎn),以及節(jié)點(diǎn)內(nèi)的元素

Element對象提供一系列的方法,可以對節(jié)點(diǎn)執(zhí)行增、刪、改、查:

factory=DocumentBuilderFactory.newInstance();            builder=factory.newDocumentBuilder();            doc=builder.parse("練習(xí)/Student.xml");            //element=build("練習(xí)/project1/Student2.xml").getDocumentElement();       Element element=doc.getDocumentElement();            System.out.println("-------"+element.getTagName()+"-------");            NodeList list=element.getElementsByTagName("student");            for(int i=0;i<list.getLength();i++){                for(int j=0;j<list.item(i).getChildNodes().getLength();j++){                    System.out.println(((Element)list.item(i).getChildNodes().item(j)).getNodeName()+":"+((Element)list.item(i).getChildNodes().item(j)).getTextContent());                }                System.out.println("--------------");                            }

上面的代碼打印xml里面的節(jié)點(diǎn)和節(jié)點(diǎn)內(nèi)的文本!

element接口里面的部分方法:

  • element.getAttribute(""); //獲取節(jié)點(diǎn)屬性的
  • element.getElementsByTagName(""); //根據(jù)節(jié)點(diǎn)名或者節(jié)點(diǎn)列表 NodeList
  • element.getChildNodes()、element.getFirstNode()、element.getNextSibling()、element.getLastNode() 見名知意:
  • element.getTagName()..... //獲取節(jié)點(diǎn)名字

方法很多,不一一介紹,上面的代碼中有體現(xiàn)!


需要注意的是:以上方法都是在內(nèi)存中執(zhí)行的,也就是在本地拿到東西后放在內(nèi)存里面,下面我們來了解增刪改時,對于多出來的操作就不覺得奇怪的

新增節(jié)點(diǎn):

新增節(jié)點(diǎn)使用document.createElement("")方法:

//在內(nèi)存中對xml新增節(jié)點(diǎn):僅是在內(nèi)存中            element=build("練習(xí)/project1/Student2.xml").getDocumentElement();            Element creELe=doc.createElement("student");            Element stuno=doc.createElement("stuno");            Element stuname=doc.createElement("stuname");            stuname.setTextContent("大頭");            Element stuage=doc.createElement("stuage");            stuage.setTextContent("20");            Element stuinfo=doc.createElement("stuinfo");            stuinfo.setTextContent("我的特點(diǎn)就是頭特別大!");            stuno.setAttribute("id","2");            creELe.appendChild(stuno);            creELe.appendChild(stuname);            creELe.appendChild(stuage);            creELe.appendChild(stuinfo);            element.appendChild(creELe);

以上操作皆是內(nèi)存里面的操作,要將節(jié)點(diǎn)保存還需要持久化:

  • import javax.xml.transform.Result;import javax.xml.transform.Source;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;

TransformerFactory tfactory=TransformerFactory.newInstance();            Transformer trans=tfactory.newTransformer();            //源    位置            Source source=new DOMSource(doc);            Result result=new StreamResult(path);            trans.transform(source, result);

n(*≧▽≦*)n也是面向?qū)ο螅?/p>

友情提示:

在添加節(jié)點(diǎn)的時候大家一定注意節(jié)點(diǎn)之間的關(guān)系,在持久化操作的時候,source對象里面應(yīng)該設(shè)置document對象,別設(shè)置成element對象

現(xiàn)在是初步學(xué)習(xí),沒遇到什么錯,我相信在后面的學(xué)習(xí)中會遇到更多問題,到時候補(bǔ)充

  

刪除、修改:

  與新增操作雷同,最后一定要"trans.transform(source, result)"

  不然你之前的代碼就都白費(fèi)了!

 

下面是重頭戲dom4j:


  dom4j是一個Java的XML API,類似于jdom,用來讀寫XML文件的。dom4j是一個十分優(yōu)秀的JavaXML API,具有性能優(yōu)異、功能強(qiáng)大和極其易使用的特點(diǎn),同時它也是一個開放源代碼的軟件,可以在SourceForge上找到它。在IBM developerWorks上面還可以找到一篇文章,對主流的Java XML API進(jìn)行的性能、功能和易用性的評測,所以可以知道dom4j無論在哪個方面都是非常出色的。如今可以看到越來越多的Java軟件都在使用dom4j來讀寫XML,特別值得一提的是連Sun的JAXM也在用dom4j。這已經(jīng)是必須使用的jar包, Hibernate也用它來讀寫配置文件。

  

  友情提示:

  了解了底層的xml操作,dom4j操作就直接上代碼,原理其實(shí)一樣的。里面的方法名會有些區(qū)別,看看幫助文檔都可以解決

  需要下載dom4j架包:

    官網(wǎng)地址:http://sourceforge.net/projects/dom4j/files/

  導(dǎo)入:import org.dom4j.*;

  

  •   查
public List sele(String path) throws Exception{        Element element=CreateUtil.reElement(path);        System.out.println("總共有:"+element.nodeCount()+"個元素");        list=new ArrayList();        //map=new HashMap();        return forhelper(element);    }/**     * 循環(huán)遍歷并且返回list     * @param ele     * @return     */    public List forhelper(Element ele){                for(Iterator ite2=ele.elementIterator();ite2.hasNext();){            Element ele2=(Element)ite2.next();            //System.out.println(ele2.getName()+":"+ele2.getText());            String Word=ele2.getName()+":"+ele2.getText();            list.add(word);            if(ele2.nodeCount()>0){                forhelper(ele2);                            }                    }        return list;            }

 

/**     * 保存指定的document對象,指定將要存儲的位置,gotopath=null時默認(rèn)存儲在打開的位置     * @param path     * @param dom     * @param goToPath     * @return     * @throws Exception     */    public boolean save(String goToPath) throws Exception{        //創(chuàng)建document        Document dom=DocumentHelper.createDocument();        //創(chuàng)建根節(jié)點(diǎn)                Element eleRoot=dom.addElement("Student");        Element ele=eleRoot.addElement("stuno").addText("1");        Element ele2=eleRoot.addElement("stuname").addText("李四");        last(dom, goToPath);        return false;    }

 

/**     * 改變文本內(nèi)容     * @param path     * @param goToPath     * @return     * @throws Exception     */    public boolean reEle(String path,String goToPath) throws Exception{        Document dom=CreateUtil.redom(path);        Element element= dom.getRootElement();        System.out.println(element.getName());        Element ele=element.element("stuname");        System.out.println(ele.asXML());        ele.setText("改變了");         last(dom, goToPath);        return false;    }

 

/**     * 刪除制定的節(jié)點(diǎn),或者節(jié)點(diǎn)內(nèi)元素     * @param path     * @return     * @throws Exception     */    public boolean del(String path,String elename) throws Exception{        Document dom=CreateUtil.redom(path);        Element element= dom.getRootElement();        System.out.println(element.getName());        Element ele=element.element(elename);        if(ele!=null){            System.out.println(ele.asXML());            System.out.println(element.remove(ele));             last(dom, path);        }else{            System.out.println("沒有你要查找的節(jié)點(diǎn)!");        }        return false;    }    
  • 持久化方法

 

/**     * 從內(nèi)存讀取到本地     * @param dom     * @param path     */    public void last(Document dom,String path){        XMLWriter xmlw=null;        try {            OutputFormat output=OutputFormat.createPrettyPrint();            output.setEncoding("utf-8");            xmlw=new XMLWriter(new FileOutputStream(new File(path)), output);            xmlw.write(dom);        } catch (Exception e) {            e.printStackTrace();        }finally{            if(xmlw!=null){                try {                    xmlw.close();                    System.out.println("操作成功!");                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }    }

注意::

  dom4j在持久化操作時會有亂碼的現(xiàn)象!

  小竅門:

  醬紫持久化就不會出現(xiàn)亂碼了!

 OutputFormat output=OutputFormat.createPrettyPrint();            output.setEncoding("utf-8");            xmlw=new XMLWriter(new FileOutputStream(new File(path)), output);       xmlw.write(dom);

  

  代碼不一定合理,請不要照搬!

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁城县| 铁岭县| 视频| 自治县| 永仁县| 新疆| 城步| 东海县| 桐庐县| 汶上县| 甘孜县| 建平县| 保山市| 连城县| 秦安县| 岳阳县| 桐梓县| 体育| 光泽县| 宝坻区| 缙云县| 江陵县| 合江县| 卢龙县| 洛阳市| 巩留县| 罗田县| 通许县| 汾阳市| 太白县| 永福县| 若尔盖县| 长兴县| 黔南| 南昌县| 福贡县| 惠来县| 连山| 泾源县| 祁门县| 延寿县|