<?xml version="1.0" encoding="gbk"?> <root> <pnode> <province> <pid>10056</pid> <pname>山东</pname> <cnode> <city> <cid>11017</cid> <cname>潍坊</cname> <znode> <zone> <zid>11018</zid> <zname>农垦</zname> <nnode> <node> <nid>11019</nid> <nname>试验点</nname> </node> <node> <nid>10020</nid> <nname>测试</nname> </node> </nnode> <zid>11018</zid> <zname>农垦a </zname> <nnode> <node> <nid>1101a 9</nid> <nname>试验点a </nname> </node> <node> <nid>1102a 0</nid> <nname>测试a </nname> </node> </nnode> </zone> </znode> </city> <city> <cid>11028</cid> <cname>诸城</cname> <znode> <zone> <zid>11029</zid> <zname>诸城都是烟田</zname> <nnode> <node> <nid>11030</nid> <nname>不信你去看</nname> </node> <node> <nid>11041</nid> <nname>你去看啊</nname> </node> </nnode> </zone> </znode> </city> </cnode> </province> </pnode> </root>
解析方法:
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.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; /** * 这里用一句话描述这个类的作用. * * @author 杜文俊 */ public class newXMLParse { Document document = null; NodeList nodeList = null; /** * 构造函数,初始化Document对象 类的构造方法. */ public newXMLParse() { // 指定File文件 File file = new File("E:\\test.xml"); // 建立DocumentBuilderFactory对象 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder; try { // 建立DocumentBuilder对象 builder = builderFactory.newDocumentBuilder(); // 用DocumentBuilder对象的parse方法引入文件建立Document对象 document = builder.parse(file); nodeList = document.getChildNodes(); // province 根据你的xml标签进行解析 NodeList province = document.getElementsByTagName("province"); // 测试1:找出所有province标签,返回NodeList showByCondition(province); // 测试2:遍历所有节点 //searchAndShow(nodeList); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { System.err.println("找不到你指定的文件!"); e.printStackTrace(); } } // 测试 1 方法:按条件输出 public void showByCondition(NodeList nodeList) { System.out.println(); System.out.println("------showByCondition输出结果-------"); Element element; // 对符合条件的所有节点进行遍历 int nodeListLength = nodeList.getLength(); for (int i = 0; i < nodeList.getLength(); i++) { // 获得一个元素 element = (Element) nodeList.item(i); // 此元素有子节点,获取所有子节点,返回一个provinceList NodeList provinceList = element.getChildNodes(); int provinceListLength = provinceList.getLength(); // 遍历所有子节点 for (int j = 0; j < provinceList.getLength(); j++) { // 若子节点的名称不为#text,则输出,#text为反/标签 // provinceList.item(j).getNodeName()获取标签的名字 String nodenameStr = provinceList.item(j).getNodeName(); if (!provinceList.item(j).getNodeName().equals("#text")) { // 输出节点名称、节点值 System.out.println(provinceList.item(j).getNodeName() + ":"+ provinceList.item(j).getTextContent()); } } } } // 测试2 方法:寻找遍历 public void searchAndShow(NodeList nodeList) { System.out.println(); System.out.println("--------- 接下来让我们看一下解析XML后得到的数据 ---------"); for (int i = 0; i < nodeList.getLength(); i++) { // 得到一个节点,需要强制转换为Element,这里Node是Element的父类 Node node = nodeList.item(i); // if (!node.getNodeName().equals("#text")) { // System.out.println(node.getNodeName()); // } // System.out.println(element.getAttribute("")); int childNodesLength = node.getChildNodes().getLength(); if (node.getChildNodes().getLength() > 3) { // 若包含子节点,则递归遍历 System.out.println("此节点包含子元素!"); searchAndShow(node.getChildNodes()); System.out.println(); } else { // 若不包含子节点,则输出节点中的内容 if (!node.getTextContent().trim().equals("") && node.getTextContent() != null) { System.out.println(node.getTextContent()); } } } } /** * 程序入口 * * @param args * @author * @update 2013-6-3 下午7:29:17 */ public static void main(String[] args) { new newXMLParse(); } }