java解析xml数据

//xml文档 testDOM.xml

<?xml version="1.0" encoding="gb2312"?>
<students>
<student id="1" name="张三">
 <age>18</age>
 <sex>男</sex>
</student>

<student id="2" name="里司">
 <age>16</age>
 <sex>女</sex>
</student>

<student id="3" name="王五">
 <age>19</age>
 <sex>男</sex>
</student>

</students>

 

 

 

//src源文件

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import org.jdom.input.SAXBuilder;
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.xml.sax.SAXException;

/**
 * 功能:
 * @author yaos  email: [email protected]
 * @date 2008 11 25
 */
public class TestParseDOM {

 /**
  * 功能:
  * @param args
  */

 public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
  
  DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
  DocumentBuilder db = domfac.newDocumentBuilder();
  Document doc = db.parse(new File("src/testDOM.xml"));//装载.xml文件 路径在default package下
  Element root = doc.getDocumentElement();//获得根元素
  NodeList nodelist = root.getChildNodes();//获得根元素下面的 所有节点的list集合
  List list = new ArrayList();//存放解析后的结果
  if(nodelist!=null){
   for(int i=0;i<nodelist.getLength();i++){//遍历节点list集合
    Node node = nodelist.item(i);//获得第i个节点
    if(node.getNodeType()==Node.ELEMENT_NODE){
//     Method 1.如果知道这一级有多少个attribute但是不知道attribute的名字
     String id = node.getAttributes().item(0).getNodeName();
     String idValue = node.getAttributes().item(0).getNodeValue();
     String name = node.getAttributes().item(1).getNodeName();
     String nameValue = node.getAttributes().item(1).getNodeValue();
     Map map = new HashMap();
     map.put(id, idValue);
     map.put(name, nameValue);
     list.add(map);
     
//     Method 2.如果知道这一级有多少个attribute并且知道attribute的名字
//     String id = node.getAttributes().getNamedItem("id").getNodeName();
//     String idValue = node.getAttributes().getNamedItem("id").getNodeValue();
//     String name = node.getAttributes().getNamedItem("name").getNodeName();
//     String nameValue = node.getAttributes().getNamedItem("name").getNodeValue();
//     Map map = new HashMap();
//     map.put(id, idValue);
//     map.put(name, nameValue);
//     list.add(map);
     
//     Method 3.如果不知道这一级有多少个attribute并且不知道attribute的名字     
//     NamedNodeMap nodeMap = node.getAttributes();
//     for(int j = 0 ; j < nodeMap.getLength();j++){
//      String key = nodeMap.item(j).getNodeName();
//      String value = nodeMap.item(j).getNodeValue();
//      Map keyValueMap = new HashMap();
//      keyValueMap.put(key, value);
//      list.add(keyValueMap);
//     }
     
     
     for(Node child=node.getFirstChild();child!=null;child=child.getNextSibling()){//遍利当前节点下的节点,(指向第一个节点;如果节点不为空;节点指向下一个兄弟节点)
      if(child.getNodeType()==Node.ELEMENT_NODE){//如果节点是 节点类型
       String childName  =  child.getNodeName();//获得的节点的名字(age或是sex)
       String childValue = child.getFirstChild().getNodeValue();//获得节点的值(注意使用的是 第一个孩子节点的value而不是直接取value,即age或sex对应的值)
//       String childValue = child.getTextContent();//使用此方法获得的与上面相同的效果,具体使用不明确
       
//       如果age和sex节点里面还有attrbitue的话可以使用以下方式编历
//       <student id="1" name="张三">
//        <age a="A">18</age>
//        <sex b="B">男</sex>
//       </student>
//       String tempName = child.getAttributes().item(0).getNodeName();
//       String tempValue = child.getAttributes().item(0).getNodeValue();
//       System.out.println(tempName+"___"+tempValue);
       
       Map map1 = new HashMap();
       map1.put(childName, childValue);
       list.add(map1);
      }
     }
    }
   }
  }
  
  for(int i = 0 ; i < list.size() ; i ++){
   Map map = (Map) list.get(i);
   for(Object obj : map.keySet()){
    System.out.println(obj.toString()+"-->"+map.get(obj));
   }
   
  }
 }

}

 

你可能感兴趣的:(java,xml,J#)