日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xml和xml解析

發(fā)布時間:2023/12/1 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xml和xml解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.簡介XML

XML?可擴(kuò)展標(biāo)記語言,傳輸數(shù)據(jù)

HTML超文本標(biāo)記語言,顯示數(shù)據(jù)

?

XML?文檔聲明? 只能放在第一行,注釋不能放在聲明之前

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>??standalone表示文檔是否依賴其他文檔。

XML元素:xml標(biāo)簽,必須有且僅有一個根標(biāo)簽,元素中的屬性不能重復(fù),屬性名稱可以當(dāng)做子標(biāo)簽去定義

  

    

xml中不會忽略主體內(nèi)容出現(xiàn)的空格和換行 //從元素集合內(nèi)找到第一個子元素 Element name = (Element)linkman.getFirstChild();

?

?特殊字符

?

?

CDATA區(qū)? 解析器不會對CDATA區(qū)中的內(nèi)容進(jìn)行解析,直接原樣輸出。

  <![CDATA[數(shù)據(jù)內(nèi)容]]>

  

2.XML約束? ??dtd 約束與 schema約束

 約束的好處:可以去規(guī)范我們的xml標(biāo)簽(根據(jù)自己的要求)可以在工具上有相應(yīng)的提示;

? dtd與schema的區(qū)別:

    ?dtd沒有人約束它,容易寫錯,功能簡單;

  ? ? ? ? Schema:Schema本身是xml文件,有相應(yīng)的標(biāo)簽約束它,功能更加強(qiáng)大;

  

3.DOM模型(文檔對象模型)  

對象:

?

Document(文檔),Element(標(biāo)簽元素),Text(文本對象), Attribute(屬性對象)

?

一切皆節(jié)點(diǎn),所有的對象都是Node對象,所以對象之間都是有關(guān)系的;

我們使用反射的開端是得到class,而對于XML的解析,一切的開始都要找到document對象;

?

4.原生API解析XML?? ? ??使用Java提供的API去解析XML? -----? ? JAXP? (Java?? API? for XML)

?

解析XML--其實(shí)就是對XML進(jìn)行增刪改查,? 它將xml文檔中的所有內(nèi)容讀取出來,然后進(jìn)行封裝并放在內(nèi)存里面..

我們?nèi)ツ盟?去修改他都是去操作的內(nèi)存中的數(shù)據(jù);使用TransFormer類 把 內(nèi)存中的數(shù)據(jù) 同步到xml里面去

?

xml文件

?

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE contacts SYSTEM "contacts.dtd"> <contacts><linkman><name>gg</name><email>gg@itsource.cn</email><address>成都</address><group>源代碼教育</group></linkman><linkman><name>mm</name><email>lanyotech@qq.com</email><address>成都</address><group>源代碼教育</group></linkman> </contacts>

?

  

package TestJAXP;import java.io.File; import java.io.IOException;import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult;import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;public class TestJAXP {/*取出第二個聯(lián)系人的名字*/@Testpublic void select() throws SAXException, IOException, ParserConfigurationException {File file = new File("F:\\workspace\\TestXml\\src\\TestJAXP\\contacts.xml");//1. 獲得dom 對象,并拿到根元素Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);Element root = dom.getDocumentElement();//2.通過標(biāo)簽名拿到根節(jié)點(diǎn)的該多個子元素,并拿到第二個linkman.NodeList linkmans = root.getElementsByTagName("linkman");Element linkman2 = (Element) linkmans.item(1);//3.拿到第二聯(lián)系人所有name元素NodeList names = linkman2.getElementsByTagName("name");Element name = (Element) names.item(0); //(效果一樣) Node name = names.item(0);//5.拿到name中的文本值String nameText = name.getTextContent();System.out.println(nameText);}/*增加一個聯(lián)系人信息*/@Testpublic void add() throws Exception{File file = new File("F:\\workspace\\TestXml\\src\\TestJAXP\\contacts.xml");//1. 獲得dom 對象,并拿到根元素。Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);Element root = dom.getDocumentElement();//2.創(chuàng)建一個linkman子元素,并將其放入根節(jié)點(diǎn)中。Element linkman = dom.createElement("linkman");root.appendChild(linkman);//3.為創(chuàng)建的標(biāo)簽添加元素Element name = dom.createElement("name");name.setTextContent("李四");linkman.appendChild(name);Element email = dom.createElement("email");email.setTextContent("11@163.com");linkman.appendChild(email);Element adress = dom.createElement("adress");adress.setTextContent("北京");linkman.appendChild(adress);Element group = dom.createElement("group");group.setTextContent("中國");linkman.appendChild(group);//4. 對內(nèi)存中修改的數(shù)據(jù),同步到磁盤的XML文件中//獲取Transformer轉(zhuǎn)換器對象,得先拿到同步的對象工廠--TransformerFactory.newInstance()Transformer trant = TransformerFactory.newInstance().newTransformer();//創(chuàng)建Source對象(綁定doc對象)--拿到內(nèi)存中的數(shù)據(jù) 和 Result對象(綁定文件對象)--拿到磁盤上的文件 Source xmlSource = new DOMSource(dom);Result outputTarget = new StreamResult(file);trant.transform(xmlSource, outputTarget);}/*刪除第三個聯(lián)系人*/@Testpublic void delete() throws Exception{File file = new File("F:\\workspace\\TestXml\\src\\TestJAXP\\contacts.xml");//1. 獲得dom 對象,并拿到根元素。Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);Element root = dom.getDocumentElement();//2.拿到第三個linkman。Element linkman3 = (Element) dom.getElementsByTagName("linkman").item(2);//3. 通過其父元素干掉他linkman3.getParentNode().removeChild(linkman3);//4.同步Transformer trant = TransformerFactory.newInstance().newTransformer();Source xmlSource = new DOMSource(dom);Result outputTarget = new StreamResult(file);trant.transform(xmlSource, outputTarget);}/*修改第一個聯(lián)系人的郵箱*/@Testpublic void modify() throws Exception{File file = new File("F:\\workspace\\TestXml\\src\\TestJAXP\\contacts.xml");//1. 獲得dom 對象,并拿到根元素。Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);Element root = dom.getDocumentElement();//2.拿到第一個linkman 元素Element linkman1 = (Element) root.getElementsByTagName("linkman").item(0);//3.拿到第一個linkman元素的 email元素,并修改值。Element email = (Element) linkman1.getElementsByTagName("email").item(0);email.setTextContent("8888@qq.com");//4.同步Transformer trant = TransformerFactory.newInstance().newTransformer();Source xmlSource = new DOMSource(dom);Result outputTarget = new StreamResult(file);trant.transform(xmlSource, outputTarget);} }

  

5. 使用Dom4J進(jìn)行解析xml

  

package TestDOM4J;import java.io.File; import java.io.FileWriter; import java.util.List;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test;public class testDOM4J {/* 獲取第二聯(lián)系人的名字*/@Testpublic void select() throws Exception {//1.通過Dom4J獲取dom 對象SAXReader reader = new SAXReader();Document doc = reader.read(new File("F:\\workspace\\TestXml\\src\\TestDOM4J\\contacts.xml"));System.out.println(doc);//2.獲得根節(jié)點(diǎn)Element root = doc.getRootElement();//3.拿到linkman,并獲取第二個linkmanList<Element> linkmans = root.elements("linkman");Element linkman2 = linkmans.get(1);

          //4.拿到linkman2的name對象
          Element name = linkman2.element("name");
          String str = name.getText();
          System.out.println(str);

} /* 增加一個聯(lián)系人*/@Testpublic void add() throws Exception {//1.通過Dom4J獲取dom 對象File file = new File("F:\\workspace\\TestXml\\src\\TestDOM4J\\contacts.xml");SAXReader reader = new SAXReader();Document doc = reader.read(file);//2.獲得根節(jié)點(diǎn)Element root = doc.getRootElement();//3.直接給元素添加節(jié)點(diǎn),設(shè)置值Element linkman = root.addElement("linkman");linkman.addElement("name").setText("張三");linkman.addElement("email").setText("1434314.@qq.com");linkman.addElement("adress").setText("上海奉賢");linkman.addElement("group").setText("中國"); //4.把修改后的內(nèi)存中數(shù)據(jù) 存儲到 硬盤xml 文件中,(同步,一定要關(guān)閉流)FileWriter fw = new FileWriter(file);//使用新的格式輸出OutputFormat of = OutputFormat.createPrettyPrint();XMLWriter xw = new XMLWriter(fw, of);xw.write(doc);xw.close();fw.close();}/*刪除第三個聯(lián)系人信息*/@Testpublic void delete() throws Exception{File file = new File("F:\\workspace\\TestXml\\src\\TestDOM4J\\contacts.xml");Document doc = new SAXReader().read(file);Element root = doc.getRootElement();//拿到第三個linkmanElement linkman3 = (Element)root.elements("linkman").get(2);//刪除元素 ,同步linkman3.getParent().remove(linkman3);FileWriter fw = new FileWriter(file);doc.write(fw);fw.close();}/*修改第一個聯(lián)系人的郵箱*/@Testpublic void modify() throws Exception{File file = new File("F:\\workspace\\TestXml\\src\\TestDOM4J\\contacts.xml");Document doc = new SAXReader().read(file);Element root = doc.getRootElement();//獲得第一聯(lián)系人的郵箱Element linkman1 = (Element)root.elements("linkman").get(0);Element email = linkman1.element("email");email.setText("1633333@163.com");//同步FileWriter fw = new FileWriter(file);doc.write(fw);fw.close();} }

  

?

轉(zhuǎn)載于:https://www.cnblogs.com/gshao/p/10285345.html

總結(jié)

以上是生活随笔為你收集整理的xml和xml解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。