程序员的灯下黑:坚持和良好心态近乎道

 解析根目录 和 属性

xml文件如下--------------------------------------------------------------------------------------------------

<html>
 <head>
   <title>
 test
   </title>
 </head>
 <body algin="center" stly="windows.back()">
  liangshi
 </body> 
</html>

实例程序如下---------------------------------------------------------------------------------------------------

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.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;


public class Dom {
 int n = 0;
 public static void main(String[] args){
  
  //建立工厂
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  try {
   //从工厂中得到documentBuilder
   DocumentBuilder builder = factory.newDocumentBuilder();
   //得到需要解析的文件
   File f = new File("D://c++//test.xml");
   //得到树
   Document doc = (Document) builder.parse(f);
   //解析数,得到树的根节点
   Element root = doc.getDocumentElement();
   //输出根节点,查看是否正确 应该输出的内容是 html
   System.out.println(root.getTagName());
   //得到所有的子节点
   NodeList children = root.getChildNodes();
   //得到共有多少的节点数
   int num = children.getLength();
   System.out.println(num);
   Dom d = new Dom();
   d.getNode(children);
  
   
   
  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }catch (SAXException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 //解析节点
 public void getNode(NodeList children){
  int num = children.getLength();
  for(int i=0;i<num;i++){
   Node child = children.item(i);
   if(child instanceof Element){
    Element chil = (Element)child;
    
    NodeList chilList = chil.getChildNodes();
    if(chilList.getLength()>1){
     for(int j=0;j<n;j++){
      System.out.print(" ");
     }
     System.out.println(chil.getTagName());
     getNode(chilList);
     //System.out.println("递归啊");
    }else{
     //打印节点名称
     for(int j=0;j<n;j++){
      System.out.print(" ");
     }
     System.out.println(chil.getTagName());
     //打印节点中的文本
     Text textNode = (Text)chil.getFirstChild();
     String text = textNode.getData().trim();
     for(int j=0;j<n;j++){
      System.out.print(" ");
     }
     System.out.println("文本内容是:"+text);
     NamedNodeMap attributes = chil.getAttributes();
     getAttributes( attributes);
     
    }
   }
  }
  n++;
 }
 //解析属性
 public void getAttributes(NamedNodeMap attributes){
  int num = attributes.getLength();
  for(int i=0;i<num;i++){
   Node attribute = attributes.item(i);
   String name = attribute.getNodeName();
   String value = attribute.getNodeValue();
   System.out.println("属性名称是:"+name +"   属性值是:"+value);
  }
 }
}
---------运行结果如下----------------------------------------------------------------------------------------

html
5
head
title
文本内容是:test
 body
 文本内容是:liangshi
属性名称是:algin   属性值是:center
属性名称是:stly   属性值是:windows.back()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值