Document解析XML實例

package com.meixin.xml;

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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 XMLParse
{
  Document document = null;

  NodeList allNode = null;

  // 構造函數,初始化Document對象
  public XMLParse()
  {
    // 指定File文件
    File file = new File("MyXml.xml");

    // 創建DocumentBuilderFactory對象
    DocumentBuilderFactory builderFactory = DocumentBuilderFactory
        .newInstance();
    DocumentBuilder builder;
    try
    {
      // 創建DocumentBuilder對象
      builder = builderFactory.newDocumentBuilder();
      // 用DocumentBuilder對象的parse方法引入文件創建Document對象
      document = builder.parse(file);
      allNode = document.getChildNodes();
        
      // 測試1:找出全部person標籤,返回NodeList
      NodeList person = document.getElementsByTagName_r("person");
      // 按條件輸出peron標籤中的屬性和值
      showByCondition(person);

      // 測試2:遍歷全部節點
      searchAndShow(allNode);

      // 測試3:按標籤名查找輸出
      this.SearchByCondition(person);
    }
    catch (ParserConfigurationException e)
    {
      e.printStackTrace();
    }
    catch (SAXException e)
    {
      e.printStackTrace();
    }
    catch (IOException e)
    {
      System.err.println("找不到你指定的文件!");
      e.printStackTrace();
    }
  }

  // 例:尋找遍歷
  public void searchAndShow(NodeList allNode)
  {
    System.out.println();
    System.out.println("------searchAndShow輸出結果-------");
    for (int i = 0; i < allNode.getLength(); i++)
    {
      // 獲得一個節點,須要強制轉換爲Element,這裏Node是Element的父類
      Node node = allNode.item(i);
      if (!node.getNodeName().equals("#text"))
      {
        System.out.println("節點名稱:" + node.getNodeName());
      }
      // System.out.println(element.getAttribute(""));

      if (node.getChildNodes().getLength() > 3)
      {
        // 若包含子節點,則遞歸遍歷
        System.out.println("此節點包含子元素!");
        searchAndShow(node.getChildNodes());
      }
      else
      {
        // 若不包含子節點,則輸出節點中的內容
        if (!node.getTextContent().trim().equals("")
            && node.getTextContent() != null)
        {
          System.out.println("節點值:" + node.getTextContent());
        }
      }
    }
  }

  // 按條件輸出
  public void showByCondition(NodeList allNode)
  {
    System.out.println();
    System.out.println("------showByCondition輸出結果-------");
    Element element;
    // 對符合條件的全部節點進行遍歷
    for (int i = 0; i < allNode.getLength(); i++)
    {
      // 得到一個元素
      element = (Element) allNode.item(i);
      // 輸出這個元素的personid屬性
      System.out.println(element.getAttribute("personid"));
      // 此元素有子節點,獲取全部子節點,返回一個personList
      NodeList personList = element.getChildNodes();
      // 遍歷全部子節點
      for (int j = 0; j < personList.getLength(); j++)
      {
        // 若子節點的名稱不爲#text,則輸出,#text爲反/標籤
        if (!personList.item(j).getNodeName().equals("#text"))
        {
          // 輸出節點名稱、節點值
          System.out.println(personList.item(j).getNodeName() + ":"
              + personList.item(j).getTextContent());
        }
      }
    }
  }

  // 按標籤名尋找節點
  public void SearchByCondition(NodeList allNode)
  {
    System.out.println();
    System.out.println("------SearchByCondition輸出結果-------");
    Element element;
    // 對符合條件的全部節點進行遍歷
    for (int i = 0; i < allNode.getLength(); i++)
    {
      // 用document來查找全部name標籤,獲得一個標籤後輸出值
      String name = document.getElementsByTagName_r("name").item(i)
          .getTextContent();
      System.out.println("姓名:" + name);

      // 用document來查找全部tel標籤,獲得一個標籤後輸出值
      String tel = document.getElementsByTagName_r("tel").item(i)
          .getTextContent();
      System.out.println("電話:" + tel);

      // //用document來查找全部tel標籤,獲得一個標籤後輸出值
      String sex = document.getElementsByTagName_r("email").item(i)
          .getTextContent();
      System.out.println("email:" + sex);
      System.out.println("===================");
    }
  }

  public static void main(String[] args)
  {
    new XMLParse();
  }
}java

輸出結果:node

------showByCondition輸出結果-------
e01
name:張三
tel:5128
email:txq512@sina.com
e02
name:meixin
tel:5252525
email:wnight88@sina.com
e03
name:yu
tel:5389654
email:yu@188.net

------searchAndShow輸出結果-------
節點名稱:people
此節點包含子元素!

------searchAndShow輸出結果-------
節點名稱:person
此節點包含子元素!

------searchAndShow輸出結果-------
節點名稱:name
節點值:張三
節點名稱:tel
節點值:5128
節點名稱:email
節點值:txq512@sina.com
節點名稱:person
此節點包含子元素!

------searchAndShow輸出結果-------
節點名稱:name
節點值:meixin
節點名稱:tel
節點值:5252525
節點名稱:email
節點值:wnight88@sina.com
節點名稱:person
此節點包含子元素!

------searchAndShow輸出結果-------
節點名稱:name
節點值:yu
節點名稱:tel
節點值:5389654
節點名稱:email
節點值:yu@188.net

------SearchByCondition輸出結果-------
姓名:張三
電話:5128
email:txq512@sina.com
===================
姓名:meixin
電話:5252525
email:wnight88@sina.com
===================
姓名:yu
電話:5389654
email:yu@188.net
===================dom

MyXml.xml文件內容函數

<?xml version="1.0" encoding="UTF-8"?>
<people>

  <person personid="e01">
    <name>張三</name>
    <tel>5128</tel>
    <email>txq512@sina.com</email>
  </person>
    
  <person personid="e02">
    <name>meixin</name>
    <tel>5252525</tel>
    <email>wnight88@sina.com</email>
  </person>
    
  <person personid="e03">
    <name>yu</name>
    <tel>5389654</tel>
    <email>yu@188.net</email>
  </person>
</people>測試

相關文章
相關標籤/搜索