<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # XML編程-DOM ### XML解析技術 ????xml解析技術常用的有兩類:dom解析和sax解析。 dom:(Document?Object?Model,?即文檔對象模型)是W3C組織推薦的處理XML的一種方式。 sax:(Simple?API?for?XML)不是官方標準,但它是XML社區事實上的標準,幾乎所有的XML解析器都支持它。 ? ### Jaxp介紹 ????Jaxp(Java?API?for?XML?Processing)是Java對XML進行編程的開發包,它由javax.xml、org.w3c.dom?、org.xml.sax?包及其子包組成。 ????在?javax.xml.parsers包中,定義了幾個工廠類,程序員調用這些工廠類,可以得到對xml文檔進行解析的?DOM?或?SAX?的解析器對象。 ? ### DOM基本概述 ????DOM(Document?Object?Model文檔對象模型),是W3C組織推薦的處理可擴展標志語言的標準編程接口。XML?DOM?定義了所有?XML?元素的對象和屬性,以及訪問它們的方法(接口)。 ? ### 原理圖 ![](https://box.kancloud.cn/2016-02-23_56cbc8806717f.jpg) ### DOM模型(document?object?model) ????DOM解析器在解析XML文檔時,會把文檔中的所有元素,按照其出現的層次關系,解析成一個個Node對象(節點)。 在dom中,節點之間關系如下: 1、位于一個節點之上的節點是該節點的父節點(parent) 2、一個節點之下的節點是該節點的子節點(children)? 3、同一層次,具有相同父節點的節點是兄弟節點(sibling)? 4、一個節點的下一個層次的節點集合是節點后代(descendant) 5、父、祖父節點及所有位于節點上面的,都是節點的祖先(ancestor)? ? ### Node對象 ????Node對象提供了一系列常量來代表結點的類型,當開發人員獲得某個Node類型后,就可以把Node節點轉換成相應的節點對象(Node的子類對象),以便于調用其特有的方法。(查看API文檔)? ????Node對象提供了相應的方法去獲得它的父結點或子結點。編程人員通過這些方法就可以讀取整個XML文檔的內容、或添加、修改、刪除XML文檔的內容了。 PS:其子接口Element功能更多。 ### 獲取Jaxp中的DOM解析器 1、調用DocumentBuilderFactory.newInstance()方法創建DOM解析器的工廠。 2、調用DocumentBuilderFactory對象的newDocumentBuilder()方法得到DOM解析器對象,其是DocumentBuilder的對象。 3、調用DocumentBuilder對象的parse()方法解析XML文檔,得到代表整個文檔的Document對象。 4、通過Document對象和一些相關類和方法,對XML文檔進行操作。 ? ### 更新XML文檔 javax.xml.transform包中的Transformer類用于把代表XML文件的Document對象轉換為某種格式后進行輸出,例如把xml文件應用樣式表后轉成一個html文檔。利用這個對象,當然也可以把Document對象又重新寫入到一個XML文件中。 Transformer類通過transform方法完成轉換操作,該方法接收一個源和一個目的地。我們可以通過: javax.xml.transform.dom.DOMSource類來關聯要轉換的document對象,? 用javax.xml.transform.stream.StreamResult?對象來表示數據的目的地。 Transformer對象通過TransformerFactory獲得。 案例: **XML5.xml** ~~~ <?xml version="1.0" encoding="UTF-8" standalone="no"?><班級 班次="1班" 編號="C1"> <學生 地址="湖南" 學號="n1" 性別="男" 授課方式="面授" 朋友="n2" 班級編號="C1"> <名字>張三</名字> <年齡>20</年齡> <介紹>不錯</介紹> </學生> <學生 學號="n2" 性別="女" 授課方式="面授" 朋友="n1 n3" 班級編號="C1"> <名字>李四</名字> <年齡>18</年齡> <介紹>很好</介紹> </學生> <學生 學號="n3" 性別="男" 授課方式="面授" 朋友="n2" 班級編號="C1"> <名字>王五</名字> <年齡>22</年齡> <介紹>非常好</介紹> </學生> <學生 性別="男"> <名字>小明</名字> <年齡>30</年齡> <介紹>好</介紹> </學生> </班級> ~~~ ~~~ package com.pc; import java.awt.List; import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; 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; /** * * @author Switch * @function Java解析XML * */ public class XML5 { // 使用dom技術對xml文件進行操作 public static void main(String[] args) throws Exception { // 1.創建一個DocumentBuilderFactory對象 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory .newInstance(); // 2.通過DocumentBuilderFactory,得到一個DocumentBuilder對象 DocumentBuilder documentBuilder = documentBuilderFactory .newDocumentBuilder(); // 3.指定解析哪個xml文件 Document document = documentBuilder.parse("src/com/pc/XML5.xml"); // 4.對XML文檔操作 // System.out.println(document); // list(document); // read(document); // add(document); // delete(document, "小明"); update(document, "小明", "30"); } // 更新一個元素(通過名字更新一個學生的年齡) public static void update(Document doc, String name, String age) throws Exception { NodeList nodes = doc.getElementsByTagName("名字"); for (int i = 0; i < nodes.getLength(); i++) { Element nameE = (Element) nodes.item(i); if (nameE.getTextContent().equals(name)) { Node prNode = nameE.getParentNode(); NodeList stuAttributes = prNode.getChildNodes(); for (int j = 0; j < stuAttributes.getLength(); j++) { Node stuAttribute = stuAttributes.item(j); if (stuAttribute.getNodeName().equals("年齡")) { stuAttribute.setTextContent(age); } } } } updateToXML(doc); } // 刪除一個元素(通過名字刪除一個學生) public static void delete(Document doc, String name) throws Exception { // 找到第一個學生 NodeList nodes = doc.getElementsByTagName("名字"); for (int i = 0; i < nodes.getLength(); i++) { Node node = nodes.item(i); if (node.getTextContent().equals(name)) { Node prNode = node.getParentNode(); prNode.getParentNode().removeChild(prNode); } } // 更新到XML updateToXML(doc); } // 添加一個學生到XML文件 public static void add(Document doc) throws Exception { // 創建一個新的學生節點 Element newStu = doc.createElement("學生"); newStu.setAttribute("性別", "男"); Element newStu_name = doc.createElement("名字"); newStu_name.setTextContent("小明"); Element newStu_age = doc.createElement("年齡"); newStu_age.setTextContent("21"); Element newStu_intro = doc.createElement("介紹"); newStu_intro.setTextContent("好"); newStu.appendChild(newStu_name); newStu.appendChild(newStu_age); newStu.appendChild(newStu_intro); // 把新的學生節點添加到根元素 doc.getDocumentElement().appendChild(newStu); // 更新到XML updateToXML(doc); } // 更新到XML private static void updateToXML(Document doc) throws TransformerFactoryConfigurationError, TransformerConfigurationException, TransformerException { // 得到TransformerFactory對象 TransformerFactory transformerFactory = TransformerFactory .newInstance(); // 通過TransformerFactory對象得到一個轉換器 Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(doc), new StreamResult( "src/com/pc/XML5.xml")); } // 具體查詢某個學生的信息(小時第一個學生的所有) public static void read(Document doc) { NodeList nodes = doc.getElementsByTagName("學生"); // 取出第一個學生 Element stu1 = (Element) nodes.item(0); Element name = (Element) stu1.getElementsByTagName("名字").item(0); System.out.println("姓名:" + name.getTextContent() + " 性別:" + stu1.getAttribute("性別")); } // 遍歷該XML文件 public static void list(Node node) { if (node.getNodeType() == node.ELEMENT_NODE) { System.out.println("名字:" + node.getNodeName()); } // 取出node的子節點 NodeList nodes = node.getChildNodes(); for (int i = 0; i < nodes.getLength(); i++) { // 顯示所有子節點 Node n = nodes.item(i); list(n); } } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看