xml解析2:使用递归解析给定的任意一个xml文档并且将其内容输出
发布时间:2020-12-15 23:36:55 所属栏目:百科 来源:网络整理
导读:使用递归解析给定的任意一个xml文档并且将其内容输出到命令行 综合 解析根元素节点,各孩子属性值,并输出 package ytu.botao.xml.dom;import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.
使用递归解析给定的任意一个xml文档并且将其内容输出到命令行 综合 解析根元素节点,各孩子属性值,并输出 package ytu.botao.xml.dom; 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.Attr; import org.w3c.dom.Comment; 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; /** * 使用递归解析给定的任意一个xml文档并且将其内容输出到命令行上 * @author botao * */ public class Demotest2 { /** * * @param args * @throws ParserConfigurationException * @throws SAXException * @throws IOException */ public static void main(String[] args) throws ParserConfigurationException,SAXException,IOException { // step 1:获得dom解析器工厂(工厂的作用时用于创建具体的解析器) DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // step 2:获得具体的dom解析器 DocumentBuilder db = dbf.newDocumentBuilder(); // step 3:解析一个xml文档,获得Document对象(根节点) Document document = db.parse(new File("student.xml")); // 以上三步为固定模式 //获取根元素节点 Element root=document.getDocumentElement(); parseElement(root); } //定义一个静态方法,通过调用该方法完成xml解析 private static void parseElement(Element element) { String tagName=element.getNodeName(); NodeList children=element.getChildNodes(); System.out.print("<"+tagName); // element元素的所有属性所构成的NamedNodeMap对象,需要对其进行判断 NamedNodeMap map = element.getAttributes(); // 如果该元素存在属性 if (null != map) { for (int i = 0; i < map.getLength(); i++) { // 获得该元素的每一个属性 Attr attr = (Attr) map.item(i); String attrName = attr.getName(); String attrValue = attr.getValue(); System.out.print(" " + attrName + "="" + attrValue + """); } } System.out.print(">"); for (int i = 0; i < children.getLength(); i++) { Node node = children.item(i); // 获得结点的类型 short nodeType = node.getNodeType(); if (nodeType == Node.ELEMENT_NODE) { // 是元素,继续递归 parseElement((Element) node); } else if (nodeType == Node.TEXT_NODE) { // 递归出口 System.out.print(node.getNodeValue()); } else if (nodeType == Node.COMMENT_NODE) { System.out.print("<!--"); Comment comment = (Comment) node; // 注释内容 String data = comment.getData(); System.out.print(data); System.out.print("-->"); } } System.out.print("</" + tagName + ">"); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |