准备工作:
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(获取该节点下及其子节点孙节点所有的文本节点内容)。