java使用document解析xml文件


准備工作:

1創建java工程

2創建xml文檔。

完成后看下面代碼:

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public class Main {

    public static void main(String[] args)  throws Exception {
        //創建一個文檔解析器工廠
        DocumentBuilderFactory fac= DocumentBuilderFactory.newInstance();

        //用上面的工廠創建一個文檔解析器
        DocumentBuilder builder=fac.newDocumentBuilder();

        //用上面的文檔解析器解析一個文件放到document對象里
        Document doc=builder.parse("src/server.xml");

        //獲取文檔中節點名稱為Listener的所有節點,並返回一個節點集合
        NodeList listenerList=doc.getElementsByTagName("Listener");
        System.out.println("一共有"+listenerList.getLength()+"個節點");

        //遍歷整個集合(把所有標簽名為Listener的節點一個一個拿出來
        for (int i=0;i<listenerList.getLength();i++){
            System.out.println("===========這是第"+(i+1)+"個listener節點的開始:===========");
            //把集合里的每一個listener節點分別拿出來
            Node node=listenerList.item(i);
            //再把上一個節點中的所有屬性拿出來
            NamedNodeMap nodeMap= node.getAttributes();
            System.out.println("第"+(i+1)+"個節點一共有"+nodeMap.getLength()+"個屬性");

            //遍歷所有屬性
            for(int j=0;j<nodeMap.getLength();j++){
                Node node1=nodeMap.item(j);
                System.out.println("第"+(j+1)+"個屬性的名稱是"+node1.getNodeName());
                System.out.println("第"+(j+1)+"個屬性的值是"+node1.getNodeValue());
            }
//獲取節點的所有子節點,注意會把所有換行符也解析為子節點
NodeList childNode=node.getChildNodes();

//遍歷所有子節點
for(int k=0;k<childNode.getLength();k++){
if(childNode.item(k).getNodeType()==Node.ELEMENT_NODE){
//這個過濾條件是只將標簽節點保留(換行符的節點就刪去)
}
System.out.println(
"===========這是第"+(i+1)+"個節點的結束:==========="); } } }

為了方便記憶,在這里拆解一下。我們的目的是解析一個xml文檔,所以就需要一個工具。這個工具就叫做DocumentBuilder類的對象,那么這個工具怎么來的呢?是從工廠里面生產出來的,那么工廠怎么來的呢?就得先創建一個工廠:DocumentBuilderFactory。在本例中解析了xml文檔中所有名為Listener標簽的所有屬性。

本人其實非常渴望研究更深入的東西,但現在實在是剛畢業,么辦法,所以只能研究研究一些場景怎么用,怎么解析xml文檔,至於到底內部是如何實現的,希望各位讀者有時間一定要深究下去,這里可能涉及到java的動態代理和工廠模式。

 

注意:1.<book>紅樓夢</book>,當獲取到book節點時,其節點名稱是book,值是null!!!。因為解析過程中把紅樓夢作為book節點的子節點解析。所以要想獲取紅樓夢,就必須在book節點處獲取第一個子節點。也可以用book節點獲取textContent(獲取該節點下及其子節點孫節點所有的文本節點內容)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM