中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用jaxp進行dom解析_動力節點Java學院整理

發布時間:2020-09-29 20:23:32 來源:腳本之家 閱讀:104 作者:mrr 欄目:編程語言

1.javax.xml.parsers 包中的DocumentBuilderFactory用于創建DOM模式的解析器對象 , DocumentBuilderFactory是一個抽象工廠類,它不能直接實例化,但該類提供了一個newInstance方法 ,這個方法會根據本地平臺默認安裝的解析器,自動創建一個工廠的對象并返回

2.調用 DocumentBuilderFactory.newInstance() 方法得到創建 DOM 解析器的工廠。

3.調用工廠對象的 newDocumentBuilder方法得到 DOM 解析器對象。

4.調用 DOM 解析器對象的 parse() 方法解析 XML 文檔,得到代表整個文檔的 Document 對象,進行可以利用DOM特性對整個XML文檔進行操作了。

案例1.遍歷xml文件中跟節點下面的所有子節點.

1.xml的約束文件Java.dtd

<!ELEMENT classes (java班,net班,php班,ios班)> 
<!ELEMENT java班 (teachers?,students?)> 
<!ELEMENT net班 (teachers?,students?)> 
<!ELEMENT php班 (teachers?,students?)> 
<!ELEMENT ios班 (teachers?,students?)> 
<!ELEMENT teachers (teacher*)> 
<!ELEMENT teacher EMPTY> 
<!ELEMENT students (student*)> 
<!ELEMENT student (name,sex,age)> 
<!ATTLIST java班 name CDATA #IMPLIED> 
<!ATTLIST net班 name CDATA #IMPLIED> 
<!ATTLIST php班 name CDATA #IMPLIED> 
<!ATTLIST ios班 name CDATA #IMPLIED> 
<!ATTLIST teacher name CDATA #IMPLIED> 
<!ATTLIST teacher sex CDATA #IMPLIED> 
<!ATTLIST teacher age CDATA #IMPLIED> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT sex (#PCDATA)> 
<!ELEMENT age (#PCDATA)> 
<!ATTLIST student id ID #IMPLIED> 

2.xml文件內容如下java.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE classes SYSTEM "bin//parsers//java.dtd"> 
<classes> 
  <java班 name="CSDNJava01班"> 
    <teachers> 
      <teacher name="軍哥" sex="男" age="28" /> 
      <teacher name="劉麗華" sex="女" age="28" /> 
    </teachers> 
    <students> 
      <student id="x121"> 
        <name>王亮</name> 
        <sex>女</sex> 
        <age>28</age> 
      </student> 
    </students> 
  </java班> 
  <!-- 注釋0 --> 
  <net班 name="CSDNNet01班">xxx</net班> 
  <php班 name="CSDNPhp01班"></php班> 
  <ios班 name="CSDNIos01班"></ios班> 
</classes> 
<!-- 對java.xml文件進行CRUD的操作 --> 
<!-- 節點 
    nodeName      nodeValue    nodeType 
element 標簽名        null       1 
Attr   屬性名       屬性值      2 
text   #text        文本的值     3 
 --> 

3.遍歷xml文件的操作

//1.獲取XML的根節點對象
@Test 
  public void test() throws ParserConfigurationException, SAXException, IOException{ 
    //調用 DocumentBuilderFactory.newInstance() 方法得到創建 DOM 解析器的工廠 
    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
    //調用工廠對象的 newDocumentBuilder方法得到 DOM 解析器對象 
    DocumentBuilder builder = builderFactory.newDocumentBuilder(); 
    //通過文件的方式獲取Document對象 
    /*File file = new File("src//parsers//java.xml"); 
    System.out.println(file+"----"); 
    Document document = builder.parse(file);*/ 
    //解析指定的文件 
    InputStream is= this.getClass().getClassLoader() 
               .getResourceAsStream("parsers//java.xml"); 
    Document document = builder.parse(is); 
     
    //document.getDocumentElement()獲取根節點的元素對象 
    Element root = document.getDocumentElement(); 
    //遍歷根節點下面的所有子節點 
    listNodes(root); 
  } 

2.遍歷節點對象的方法

/** 
   * 遍歷根據節點對象下面的所有的節點對象 
   * @param node 
   */ 
  public void listNodes(Node node) { 
    // 節點是什么類型的節點 
    if (node.getNodeType() == Node.ELEMENT_NODE) {// 判斷是否是元素節點 
      Element element = (Element) node; 
      //判斷此元素節點是否有屬性 
      if(element.hasAttributes()){ 
        //獲取屬性節點的集合 
        NamedNodeMap namenm =  element.getAttributes();//Node 
        //遍歷屬性節點的集合 
        for(int k=0;k<namenm.getLength();k++){ 
          //獲取具體的某個屬性節點 
          Attr attr = (Attr) namenm.item(k); 
          System.out.println("name:::"+attr.getNodeName()+" value::" 
                   +attr.getNodeValue()+" type::"+attr.getNodeType()); 
        } 
      } 
      //獲取元素節點的所有孩子節點 
      NodeList listnode = element.getChildNodes(); 
      //遍歷 
      for (int j = 0; j < listnode.getLength(); j++) { 
        //得到某個具體的節點對象 
        Node nd = listnode.item(j); 
        System.out.println("name::" + nd.getNodeName() + " value:::" 
            + nd.getNodeValue() + " type:::" + nd.getNodeType()); 
        //重新調用遍歷節點的操作的方法 
        listNodes(nd); 
      } 
 
    } 
  } 

4.查詢某個節點對象(簡單列舉一些案例)

/** 
 * 根據標簽的名稱查找所有該名稱的節點對象 
 */ 
public void findNode(Document document) { 
  //根據標簽名稱獲取該名稱的所有節點對象 
  NodeList nodelist = document.getElementsByTagName("teacher"); 
  //遍歷 
  for (int i = 0; i < nodelist.getLength(); i++) { 
    //得到具體的某個節點對象 
    Node node = nodelist.item(i); 
    System.out.println(node.getNodeName()); 
  } 
} 
 
/** 
 * 根據屬性的值 查詢某個節點對象 
 * 屬性值是唯一(假設) 
 * @param document 
 * @param value 
 * @return 
 */ 
public Node findNodeByAttrValue(Document document, String value) { 
  //根據標簽名稱獲取該名稱的節點對象集合 
  NodeList nodelist = document.getElementsByTagName("teacher"); 
  //遍歷 
  for (int i = 0; i < nodelist.getLength(); i++) { 
    //獲取某個具體的元素節點對象 
    Element node = (Element) nodelist.item(i); 
    //根據屬性名稱獲取該節點的屬性節點對象 
    Attr attr = node.getAttributeNode("name"); 
    //獲取屬性節點的值是否給指定的節點屬性值相同 
    if (attr.getNodeValue().equals(value)) { 
      //返回此節點 
      return node; 
    } 
  } 
  return null; 
} 
 
/** 
 * 根據id獲取某個節點對象 
 * 
 * @param document 
 * @param id 
 * @return 
 */ 
public Node findNodeById(Document document, String id) { 
  return document.getElementById(id); 
} 

5.刪除指定的節點對象

/** 
   * 刪除某個節點對象 
   * 
   * @param document 
   * @param id 
   * @throws TransformerException 
   */ 
  public void deleteNodeById(Document document, String id) 
      throws TransformerException { 
    //獲取刪除的節點對象 
    Node node = document.getElementById(id); 
    // 是通過父節點調用removeChild(node)把子節點給刪除掉 
    Node node1 = node.getParentNode().removeChild(node); 
     
    //創建TransformerFactory對象 
    TransformerFactory transformerFactory = TransformerFactory 
        .newInstance(); 
    //Transformer類用于把代表XML文件的Document對象轉換為某種格式后進行輸出 
    //Transformer對象通過TransformerFactory獲得 
    Transformer transformer = transformerFactory.newTransformer(); 
    // 把Document對象又重新寫入到一個XML文件中。 
    transformer.transform(new DOMSource(document), new StreamResult( 
        new File("src//a.xml"))); 
  } 

6.更新某個節點對象

/** 
 * 更新某個節點 
 * 
 * @param document 
 * @param id 
 * @throws TransformerException 
 */ 
public void updateNodeById(Document document, String id) 
    throws TransformerException { 
  //根據id獲取元素指定的元素節點對象 
  Element node = document.getElementById(id); 
  //獲取元素節點的id屬性節點對象 
  Attr attr = node.getAttributeNode("id"); 
  //修改元素節點的屬性值 
  attr.setValue("x122"); 
 
  //獲取該節點對象的所有孩子節點對象name、age、sex節點 
  NodeList nodelist = node.getChildNodes(); 
    //遍歷 
  for (int i = 0; i < nodelist.getLength(); i++) { 
    //得到具體的節點對象 
    Node n = nodelist.item(i); 
    //判斷是否是元素節點對象 
    if (n.getNodeType() == Node.ELEMENT_NODE) { 
      //看是否是name節點 
      if (n.getNodeName().equals("name")) { 
        n.setTextContent("君君");//修改其值 
      } else if (n.getNodeName().equals("age")) {//看看是否是age節點 
        n.setTextContent("80");//修改其值 
      } else if (n.getNodeName().equals("sex")) {//看看是否是sex節點 
        n.setTextContent("男");//修改其值 
      } else { 
        System.out.println("不做處理"); 
      } 
    } 
  } 
 
  //創建TransformerFactory對象 
  TransformerFactory transformerFactory = TransformerFactory 
      .newInstance(); 
  //Transformer類用于把代表XML文件的Document對象轉換為某種格式后進行輸出 
  //Transformer對象通過TransformerFactory獲得 
  Transformer transformer = transformerFactory.newTransformer(); 
  //把Document對象又重新寫入到一個XML文件中。 
  transformer.transform(new DOMSource(document), new StreamResult( 
      new File("src//b.xml"))); 
} 

7.在某個節點的下方添加新的節點

/** 
 * 在指定的節點下方添加新得某個節點 
 * 
 * @param document 
 * @param id 
 * @throws TransformerException 
 */ 
public void addNodeById(Document document, String id) 
    throws TransformerException { 
  //獲取要添加位置節點的兄弟節點對象 
  Element node = document.getElementById(id); 
  //獲取其父節點對象 
  Node parentNode = node.getParentNode(); 
  //創建元素節點 
  Element nd = document.createElement("student"); 
  //設置元素節點的屬性值 
  nd.setAttribute("id", "x123"); 
  //創建name元素節點 
  Node name = document.createElement("name"); 
  //設置name節點的文本值 
  name.appendChild(document.createTextNode("陳紅軍")); 
  //創建age元素節點 
  Node age = document.createElement("age"); 
  //設置age節點的文本值 
  age.appendChild(document.createTextNode("20")); 
  //創建sex元素節點 
  Node sex = document.createElement("sex"); 
  //設置sex節點的文本值 
  sex.appendChild(document.createTextNode("男")); 
  //在nd節點中添加3個子節點 
  nd.appendChild(name); 
  nd.appendChild(age); 
  nd.appendChild(sex); 
  //在父節點中添加nd節點 
  parentNode.appendChild(nd); 
  //創建TransformerFactory對象 
  TransformerFactory transformerFactory = TransformerFactory 
      .newInstance(); 
  //Transformer類用于把代表XML文件的Document對象轉換為某種格式后進行輸出 
  //Transformer對象通過TransformerFactory獲得 
  Transformer transformer = transformerFactory.newTransformer(); 
  //把Document對象又重新寫入到一個XML文件中。 
  transformer.transform(new DOMSource(document), new StreamResult( 
      new File("src//c.xml"))); 
} 

通過以上方法的練習希望你對xml的DOM解析有個入門的了解.

總結

以上所述是小編給大家介紹的使用jaxp進行dom解析_,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陈巴尔虎旗| 咸丰县| 朝阳县| 巴中市| 秀山| 乐东| 合阳县| 酒泉市| 台南县| 兰州市| 峨山| 水富县| 大英县| 南安市| 兴化市| 时尚| 炎陵县| 龙江县| 澎湖县| 合江县| 大石桥市| 梁河县| 锦州市| 阳西县| 石台县| 万州区| 金平| 南汇区| 巴东县| 凭祥市| 噶尔县| 苗栗市| 镇沅| 康马县| 湟中县| 和硕县| 太保市| 仁布县| 吉安市| 乌兰浩特市| 化德县|