zoukankan      html  css  js  c++  java
  • Xml解析

    
    
    Dom解析 Dom4j解析是一次性将文件读取到内存中来进行解析,而SAX是事件驱动型,读一行解析一行。
    SAXReader 解析器

    1
    import java.util.Iterator; 2 3 import org.dom4j.Document; 4 import org.dom4j.Element; 5 import org.dom4j.io.SAXReader; 6 7 public class Dom4jTest { 8 9 /** 10 * @param args 11 */ 12 public static void main(String[] args) { 13 try { 14 //创建解析器 15 SAXReader reader = new SAXReader(); 16 //通过解析器的read方法将配置文件读取到内存中,生成一个Document[org.dom4j]对象树 17 Document document = reader.read("conf/students.xml"); 18 //获取根节点 19 Element root = document.getRootElement(); 20 //开始遍历根节点 21 for(Iterator<Element> rootIter = root.elementIterator();rootIter.hasNext();){ 22 Element studentElt = rootIter.next(); 23 for(Iterator<Element> innerIter = studentElt.elementIterator();innerIter.hasNext();){ 24 Element innerElt = innerIter.next(); 25 String innerValue = innerElt.getStringValue(); 26 System.out.println(innerValue); 27 } 28 System.out.println("-------------------------------"); 29 } 30 } catch (Exception e) { 31 e.printStackTrace(); 32 } 33 } 34 35 }

     //sax解析

     1 import javax.xml.parsers.ParserConfigurationException;
     2 import javax.xml.parsers.SAXParser;
     3 import javax.xml.parsers.SAXParserFactory;
     4 
     5 import org.xml.sax.Attributes;
     6 import org.xml.sax.SAXException;
     7 import org.xml.sax.helpers.DefaultHandler;
     8 
     9 public class MySAXParser {
    10 
    11     /**
    12      * @param args
    13      */
    14     public static void main(String[] args) {
    15         try {
    16             //创建解析器工厂
    17             SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
    18             //创建解析器
    19             SAXParser saxParser = saxParserFactory.newSAXParser();
    20             //通过解析器的parser方法
    21             saxParser.parse("conf/persons.xml", new MyDefaultHandler());
    22         } catch (Exception e) {
    23             // TODO Auto-generated catch block
    24             e.printStackTrace();
    25         }
    26     }
    27 
    28 }
    29 
    30 class MyDefaultHandler extends DefaultHandler{
    31 
    32     @Override
    33     public void startElement(String uri, String localName, String qName,
    34             Attributes attributes) throws SAXException {
    35         System.out.print("<" + qName + ">");
    36     }
    37     @Override
    38     public void characters(char[] ch, int start, int length)
    39             throws SAXException {
    40         System.out.print(new String(ch,start,length));
    41     }
    42 
    43     @Override
    44     public void endElement(String uri, String localName, String qName)
    45             throws SAXException {
    46         System.out.print("</" + qName + ">");
    47     }
    48 
    49 
    50     
    51 }
     1 Xpath解析
     2 import org.dom4j.Document;
     3 import org.dom4j.Element;
     4 import org.dom4j.io.SAXReader;
     5 
     6 public class SysConfigParser {
     7 
     8     /**
     9      * @param args
    10      */
    11     public static void main(String[] args) {
    12         try {
    13             //创建解析器
    14             SAXReader reader = new SAXReader();
    15             //通过解析器的read方法将配置文件读取到内存中,生成一个Dcoumente【org.dom4j】对象树
    16             Document document = reader.read("conf/sys-config.xml");
    17             //driver-name节点元素的路径:config -> database-info -> driver-name
    18             // driver-name节点元素的xpath路径:/config/database-info/driver-name
    19             Element driverNameElt = (Element) document.selectSingleNode("/config/database-info/driver-name");
    20             //获取driverNameElt节点元素对象的文本内容
    21             String driverName = driverNameElt.getStringValue();
    22             System.out.println(driverName);
    23             
    24             //url节点元素的路径: config -> database-info -> url
    25             //url节点元素的xpath路径: /config/database-info/url
    26             //url节点元素的xpath路径: config//url
    27             //url节点元素的xpath路径: //url
    28             Element urlElt = (Element) document.selectSingleNode("config//url");
    29             String url = urlElt.getStringValue();
    30             System.out.println(url);
    31             
    32             //user节点元素的路径:config -> database-info -> user
    33             //user节点元素的xpath路径:/config/database-info/user
    34             //user节点元素的xpath路径:config//user
    35             //user节点元素的xpath路径://user
    36             Element userElt = (Element) document.selectObject("//user");
    37             String user = userElt.getText();
    38             System.out.println(user);
    39             
    40             Element passwordElt = (Element) document.selectSingleNode("//password");
    41             String password = passwordElt.getTextTrim();
    42             System.out.println(password);
    43         } catch (Exception e) {
    44             // TODO Auto-generated catch block
    45             e.printStackTrace();
    46         }
    47     }
    48 
    49 }
     1 import org.dom4j.Attribute;
     2 import org.dom4j.Document;
     3 import org.dom4j.DocumentException;
     4 import org.dom4j.Element;
     5 import org.dom4j.io.SAXReader;
     6 
     7 public class ServerParser {
     8 
     9     /**
    10      * @param args
    11      */
    12     public static void main(String[] args) {
    13         try {
    14             //创建解析器
    15             SAXReader saxReader = new SAXReader();
    16             //通过解析器的read方法将配置文件读取到内存中,生成一个Document对象树
    17             Document document = saxReader.read("conf/server.xml");
    18             //获取connector节点元素对象的路径:server -> service -> connector
    19             //获取connector节点元素对象的xpath路径:/server/service/connector
    20             //获取connector节点元素对象的xpath路径:server//connector
    21             //获取connector节点元素对象的xpath路径://connector
    22             Element connectorElt = (Element) document.selectSingleNode("//connector");
    23             
    24             //获取connectorElt节点元素对象的port属性对象
    25             Attribute portAttr = connectorElt.attribute("port");
    26             //获取portAttr属性对象的值
    27             String port = portAttr.getStringValue();
    28             
    29             String portValue = connectorElt.attributeValue("port");
    30             
    31             System.out.println(portValue);
    32             
    33         } catch (Exception e) {
    34             // TODO Auto-generated catch block
    35             e.printStackTrace();
    36         }
    37     }
    38 
    39 }
     1 import javax.xml.parsers.DocumentBuilder;
     2 import javax.xml.parsers.DocumentBuilderFactory;
     3 import javax.xml.parsers.ParserConfigurationException;
     4 import javax.xml.xpath.XPath;
     5 import javax.xml.xpath.XPathConstants;
     6 import javax.xml.xpath.XPathFactory;
     7 
     8 import org.w3c.dom.Document;
     9 import org.w3c.dom.Element;
    10 import org.w3c.dom.NodeList;
    11 
    12 public class MyXPathTest {
    13 
    14     /**
    15      * @param args
    16      */
    17     public static void main(String[] args) {
    18         try {
    19             //创建解析工厂
    20             DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    21             //创建解析器
    22             DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
    23             //通过解析器读取配置文件,生成一个Document[org.w3c.dom]对象树
    24             Document document = builder.parse("conf/bookstore.xml");
    25             
    26             //创建XPath对象
    27             XPath xPath = XPathFactory.newInstance().newXPath();
    28             
    29 //            1.获取bookstore节点下book属性category值为web下的第二个title节点的文本内容
    30 //             bookstore -> book[@category='web'][2] -> title 
    31 //             xpath路径:/bookstore/book[@category='web'][2]/title/text()
    32             String titleXpath = "/bookstore/book[@category='web'][2]/title/text()";
    33             String titleValue = (String) xPath.evaluate(titleXpath, document, XPathConstants.STRING);
    34             System.out.println(titleValue);
    35             
    36 //            2.获取bookstore节点下book属性category值为web的titile属性为en的节点内容
    37 //            bookstore -> book[@category='web'] -> title[@lang='en']
    38 //            xpath路径:/bookstore/book[@category='web']/title[@lang='en']/text()
    39             String titleLangXpath = "/bookstore/book[@category='web']/title[@lang='en']/text()";
    40             String titleLangValue = (String) xPath.evaluate(titleLangXpath, document, XPathConstants.STRING);
    41             System.out.println(titleLangValue);
    42             
    43 //             3.获取bookstore下book属性category值为cooking的title的lang属性的值
    44 //             bookstore -> book[@category='cooking'] -> title ->@lang
    45 //             xpath路径:/bookstore/book[@category='cooking']/title/@lang
    46             String titleLangAttrXpath = "/bookstore/book[@category='cooking']/title/@lang";
    47             String titleLangAttrValue = (String) xPath.evaluate(titleLangAttrXpath, document, XPathConstants.STRING);
    48             System.out.println(titleLangAttrValue);
    49             
    50 //             4.获取bookstore节点下所有book的节点集合
    51 //             /bookstore/book
    52             NodeList bookList = (NodeList) xPath.evaluate("/bookstore/book", document, XPathConstants.NODESET);
    53             //开始遍历bookList
    54             for(int i = 0; i < bookList.getLength(); i++){
    55                 Element bookElt = (Element) bookList.item(i);
    56                 String titleValue01 = (String) xPath.evaluate("title", bookElt, XPathConstants.STRING);
    57                 String authorValue = (String) xPath.evaluate("author", bookElt, XPathConstants.STRING);
    58                 String year = (String) xPath.evaluate("year", bookElt, XPathConstants.STRING);
    59                 String price = (String) xPath.evaluate("price", bookElt, XPathConstants.STRING);
    60                 System.out.println(titleValue01 + " " + authorValue + " " + year + " " + price);
    61                 System.out.println("---------------");
    62             }
    63         } catch (Exception e) {
    64             // TODO Auto-generated catch block
    65             e.printStackTrace();
    66         }
    67     }
    68 
    69 }
  • 相关阅读:
    堆排序算法
    二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)
    hdoj1010 奇偶剪枝+DFS
    常见排序算法c++总结
    B
    C
    D
    E
    G
    F
  • 原文地址:https://www.cnblogs.com/wings-ff/p/9250484.html
Copyright © 2011-2022 走看看