准備工作:
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(獲取該節點下及其子節點孫節點所有的文本節點內容)。