节点; XML中任何东西都是节点 就比如下面这段代码中: <?xmlversion="1.0"encoding="UTF-8"?> <!--我的第一个xml文档--> <!DOCTYPEnote[ <!ELEMENTnote(to,from,heading,body)> <!ELEMENTto(#PCDATA)> <!ELEMENTfrom(#PCDATA)> <!ELEMENTheading(#PCDATA)> <!ELEMENTbody(#PCDATA)> ]> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body><</body> <emptyElement/> </note> 节点都有:<note>、<note>与<to>之间的换行、<to>、George、<from>、John、</from>与<heading>之间的换行、Reminder、</heading>与<body>之间的换行、<body>、<、</body>与<emptyElement>之间的换行、<emptyElement> DOM:解析book.xml Book.xml: <?xmlversion="1.0"encoding="UTF-8"?> <书架> <书category="语言"language="cn"> <书名name="XXXXX">javaweb开发</书名> <作者>Tom</作者> <s售价>78</s售价> </书> <书category="脚本技术"language="en"> <书名name="XXXXX">javaweb开发</书名> <作者>Tom</作者> <s售价>78</s售价> </书> </书架> packagexml.dom; importjava.io.File; importorg.w3c.dom.Node; importjava.io.IOException; importorg.w3c.dom.Document; importorg.w3c.dom.NodeList; importorg.w3c.dom.NamedNodeMap; importorg.xml.sax.SAXException; importjavax.xml.parsers.DocumentBuilder; importjavax.xml.parsers.DocumentBuilderFactory; importjavax.xml.parsers.ParserConfigurationException; publicclassMyDomTest{ publicstaticvoidmain(String[]args){ try{ /*调用DocumentBuilderFactory.newInstance()方法得到创建DOM解析器的工厂。**/ //获取工厂对象 DocumentBuilderFactoryfactoty=DocumentBuilderFactory.newInstance(); /*调用工厂对象的newDocumentBuilder方法得到DOM解析器对象。**/ //获取解析器 DocumentBuilderbuilder=factoty.newDocumentBuilder(); /*调用DOM解析器对象的parse()方法解析XML文档,得到代表整个文档的Document对象,进行可以利用DOM特性对整个XML文档进行操作了。**/ //解析指定文档 Documentdoc=builder.parse(newFile("src/book.xml")); /*NodeList对象代表一个有顺序的节点列表**/ //顺序访问节点的方式找到书架节点 NodeListnodeList= doc.getChildNodes().item(0).getChildNodes();/*childNodes属性可返回指定节点的子节点的节点列表**/ System.out.println("当前根节点书架的节点数:"+nodeList.getLength());/*length属性可返回一个节点列表中的节点数目**/ //随机访问已知元素名称的指定节点 NodeListnodelist=doc.getElementsByTagName("书架"); /*Node的对象note代表文档树中的一个节点,它可以是元素节点、属性节点、文本节点,或者也可以是“节点类型”那一节中所介绍的任何一种节点**/ Nodenode=nodelist.item(0);/*item()方法可返回节点列表中处于指定索引号的节点**/ listAllNodes(node); }catch(SAXExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }catch(ParserConfigurationExceptione){ e.printStackTrace(); } } //对指定的节点进行遍历 publicstaticvoidlistAllNodes(Nodenode){ System.out.println("节点名:"+node.getNodeName()+"节点值:"/*nodeName属性可返回节点的名称,根据其类型**/ +node.getNodeValue());/*nodeValue属性可设置或返回某节点的值,根据其类型**/ if(node.getNodeType()==Node.ELEMENT_NODE){/*nodeType属性可返回节点的节点类型**/ //遍历当前元素节点的属性 if(node.hasAttributes()){/*hasAttributes()方法会在某节点用于任何属性时返回true,否则返回false**/ NamedNodeMapattrs=node.getAttributes();/*NamedNodeMap对象表示一个无顺序的节点列表**/ for(inti=0;i<attrs.getLength();i++){ NodeattrNode=attrs.item(i); System.out.println(attrNode.getNodeName()+ attrNode.getNodeValue()); } } //遍历当前元素节点的子结点,利用递归实现 if(node.hasChildNodes()){/*判断当前节点是否拥有子节点。**/ NodeListnodeList=node.getChildNodes(); for(inti=0;i<nodeList.getLength();i++){ NodechildNode=nodeList.item(i); listAllNodes(childNode);//递归 } } } } }