XML---解析
来源:互联网 发布:sci hub 知乎 编辑:程序博客网 时间:2024/05/17 20:15
本文介绍三种xml文件的解析方法,Dom解析,SAX解析,Dom4j解析。
1.Dom解析
Dom解析是javax下的一种xml解析方法
解析过程如下:
package parseXML;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;public class DomTest { public static void main(String[] args) { // TODO Auto-generated method stub try { readXml("src/basic/basic.xml"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void readXml(String path) throws Exception{ //1.拿到工厂 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //2.拿到解析器 DocumentBuilder builder =factory.newDocumentBuilder(); //3.解析XML Document doc=builder.parse(path); //4.拿到根标签 Element root=doc.getDocumentElement(); //查看所有节点内容 showDetail(root); } public static void showDetail(Node node){ //1.查看本节点内容 String name =node.getNodeName(); if("#text".equals(name)){ name = node.getTextContent(); } System.out.print(name); //2.本节点属性 NamedNodeMap attrs=node.getAttributes(); if(attrs!=null){ int len = attrs.getLength(); for(int i=0;i<len;i++){ Node att =attrs.item(i); String key =att.getNodeName(); String value =att.getNodeValue(); System.out.print(" "+key+" ="+value+" "); } } System.out.println(); //递归 //node.getChildNodes().getLength()>0 //node.hasChildNodes() if(node.hasChildNodes()){ NodeList cns=node.getChildNodes(); int len=cns.getLength(); for(int i = 0; i < len; i++){ Node cn =cns.item(i); showDetail(cn); } } }}
2.SAX解析
SAX解析也是由javax提供的xml文件的解析方法
解析过程如下:
package parseXML;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SAXTest { public static void main(String[] args) { // TODO Auto-generated method stub try { readXml("src/basic/basic.xml"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void readXml(String path)throws Exception{ SAXParserFactory factory =SAXParserFactory.newInstance(); SAXParser parser =factory.newSAXParser(); parser.parse(path, new DefaultHandler(){ @Override public void startDocument() throws SAXException { System.out.println("开始读取xml文档"); } @Override public void endDocument() throws SAXException { System.out.println("xml读取结束"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.print("<"+qName); int len =attributes.getLength(); for(int i =0;i<len ;i++){ String key =attributes.getQName(i); String value =attributes.getValue(i); System.out.print(key+"= "+value+" "); } System.out.print(">"); System.out.println(); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("</"+qName+">"); } @Override public void characters(char[] ch, int start, int length) throws SAXException { System.out.println("字符内容:"+new String(ch, start, length)); } } ); }}
3.Dom4解析方法
Dom4解析方法需要添加dom4j架包。
解析过程如下:
package parseXML;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Dome4Test { public static void main(String[] args) { try { readXml("src/basic/basic.xml"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void readXml(String path)throws Exception{ SAXReader reader =new SAXReader(); Document doc=reader.read(path); Element root =doc.getRootElement(); showDetail(root); } private static void showDetail(Element e) { //查看节点内容 String name =e.getName(); String text =e.getText(); System.out.print(name); List<Attribute> attrs =e.attributes(); //展示属性 if(attrs!=null){ for(Attribute attr:attrs){ String key=attr.getName(); String value =attr.getValue(); System.out.print(" "+key+"="+value+" "); } } if(text!=null){ System.out.print(text); } System.out.println(); //判断是否有子节点 if(e.hasContent()){ List<Element> elements=e.elements(); for(Element ele:elements){ showDetail(ele); } } }}
阅读全文
0 0
- XML解析
- xml解析
- XML解析
- 解析XML
- xml解析
- 解析xml
- 解析xml
- xml解析
- XML解析
- xml解析
- XML解析
- xml解析
- xml解析
- xml解析
- xml解析
- xml解析
- 解析xml
- XML解析
- 利用Scrapy爬取知乎用户详细信息并存至MongoDB
- CSS内联元素、块级元素的水平居中和垂直居中方法总结
- Linux搭建Java服务器环境-Mysql安装
- smb远程读取共享文件出现的问题
- Hibernate 安装及使用
- XML---解析
- TCP通讯协议和UDP通讯协议
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- Mybatis 动态SQL
- 试了试android
- 2017广西邀请赛 G Duizi and Shunzi(贪心)
- 小范围排序(巧用堆排序) -- 算法小结
- Vue2.0 探索之路——生命周期和钩子函数的一些理解
- 编码规范系列:html规范