XML解析器-简单工厂模式
SAX的使用
| 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 SaxTest1 {     public static void main(String[] args) throws
  Exception, SAXException     {        //step1: 获得SAX解析器工厂实例        SAXParserFactory factory =
  SAXParserFactory.newInstance();                //step2: 获得SAX解析器实例        SAXParser parser =
  factory.newSAXParser();                //step3:开始进行解析        parser.parse(new File("students.xml"),new MyHandler());     } } class MyHandler extends DefaultHandler {     @Override     public void startDocument() throws
  SAXException     {        System.out.println("startDocument");     }     @Override     public void endDocument() throws
  SAXException     {        System.out.println("endDocument");     }     @Override     public void startElement(String uri,
  String localName, String qName,            Attributes attributes) throws
  SAXException     {        System.out.println("startElement");     }     @Override     public void endElement(String uri,
  String localName, String qName)            throws SAXException     {        System.out.println("endElement");     } } | 
| 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 SaxTest2 {     public static void main(String[] args) throws
  Exception, SAXException     {        SAXParserFactory factory =
  SAXParserFactory.newInstance();        SAXParser parser =
  factory.newSAXParser();        parser.parse(new File("students.xml"), new MyHandler2());     } } class MyHandler2 extends DefaultHandler {     private Stack<String> stack = new
  Stack<String>();     private String name;     private String sex;     private String age;     @Override     public void startElement(String uri,
  String localName, String qName,            Attributes attributes) throws
  SAXException     {        stack.push(qName);        for (int i = 0; i < attributes.getLength(); i++)        {            String attrName =
  attributes.getQName(i);            String attrValue =
  attributes.getValue(i);            System.out.println(attrName + "=" +
  attrValue);        }     }     @Override     public void characters(char[] ch, int start, int length)            throws SAXException     {        String tag = stack.peek();        if ("name".equals(tag))        {            name = new String(ch, start, length);        }        else if ("sex".equals(tag))        {            sex = new String(ch, start, length);        }        else if ("age".equals(tag))        {            age = new String(ch, start, length);        }     }     @Override     public void endElement(String uri,
  String localName, String qName)            throws SAXException     {        stack.pop();        if ("student".equals(qName))        {            System.out.println("name = " + name);            System.out.println("sex = " + sex);            System.out.println("age = " + age);            System.out.println();        }     } } | 
Dom的使用
| import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class DomTest1 {     public static void main(String[] args) throws Exception     {        //step1:获得dom解析器工厂(工厂的作用是用于创建具体的解析器)        DocumentBuilderFactory dbf =
  DocumentBuilderFactory.newInstance();                //step2: 获得具体的dom解析器        DocumentBuilder db=
  dbf.newDocumentBuilder();                //step3:解析一个xml文档,获得Document对象(根结点)        Document doc = db.parse(new File("students.xml"));                NodeList list = doc.getElementsByTagName("student");                for(int i=0 ;i<list.getLength();i++)        {            Element elem=
  (Element)list.item(i);            String name =
  elem.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();            String sex =
  elem.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue();            Integer age = Integer.valueOf(elem.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());            System.out.println(name);            System.out.println(sex);            System.out.println(age.intValue());            System.out.println("-------------------------");        }      } } | 
| import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; 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 DomTest2 {     public static void main(String[] args) throws Exception     {        DocumentBuilderFactory dbf =
  DocumentBuilderFactory.newInstance();                DocumentBuilder db =
  dbf.newDocumentBuilder();                Document doc = db.parse("students.xml");                System.out.println(doc.getXmlEncoding());        System.out.println(doc.getXmlVersion());        System.out.println(doc.getXmlStandalone());                System.out.println("--------------------------");                Element root = doc.getDocumentElement();                System.out.println(root.getTagName());                //空格也算结点        NodeList list = root.getChildNodes();                for(int i=0 ; i< list.getLength();i++)        {            System.out.println(list.item(i).getNodeName());        }                System.out.println("----------------------------");                for(int i=0 ; i< list.getLength();i++)        {            Node
  n = list.item(i);                        System.out.println(n.getNodeType()+":"+n.getNodeValue());        }                System.out.println("----------------------------");                for(int i=0 ; i<list.getLength();i++)        {            Node node = list.item(i);                        System.out.println(node.getTextContent());        }                System.out.println("----------------------------");                NodeList nodeList =
  doc.getElementsByTagName("student");                for(int i=0;i<nodeList.getLength();i++)        {            NamedNodeMap map =
  nodeList.item(i).getAttributes();                        String attrName =
  map.item(0).getNodeName();            String attrValue =
  map.item(0).getNodeValue();                        System.out.println(attrName+"="+attrValue);        }                System.out.println("----------------------------");     } } | 
| import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; 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; /**  * 使用递归解析给定的任意一个xml文档,并把它输出到命令行上  *   * @author anllin  *   */ public class DomTest3 {     public static void main(String[] args) throws Exception     {        DocumentBuilderFactory dbf =
  DocumentBuilderFactory.newInstance();        DocumentBuilder db = dbf.newDocumentBuilder();        Document doc = db.parse(new File("students.xml"));                parseElemnet(doc.getDocumentElement());     }     private static void parseElemnet(Element
  element)     {        String tagName = element.getNodeName();        NodeList childs =
  element.getChildNodes();         System.out.print("<" + tagName );        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 < childs.getLength(); i++)        {            Node node = childs.item(i);            short nodeType =
  node.getNodeType();            if (nodeType == Node.ELEMENT_NODE)            {               parseElemnet((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.println(data);               System.out.print("-->");            }        }                System.out.print("</"+tagName+">");     } } | 
Jdom的使用
| mport org.jdom.Comment; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; //jdom集成了dom和sax的优点 public class JdomTest1 {     public static void main(String[] args) throws
  Exception, IOException     {        Document document = new Document();                Comment comment = new Comment("this is my comment");        document.addContent(comment);                Element root = new Element("student");                root.setAttribute("id","1");                document.addContent(root);        Element e1 = new Element("name");                e1.addContent("张三");                Element e2 = new Element("sex");                e2.addContent("男");                Element e3 = new Element("age");                e3.addContent("30");                root.addContent(e1);        root.addContent(e2);        root.addContent(e3);                Format format = Format.getPrettyFormat();                format.setIndent("    ");                //format.setEncoding("gbk");                XMLOutputter out = new
  XMLOutputter(format);                out.output(document,new
  FileOutputStream("jdom.xml"));     } } | 
| import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class JdomTest2 {     public static void main(String[] args) throws Exception     {        SAXBuilder builder = new SAXBuilder();                Document doc=builder.build(new File("jdom.xml"));                Element root=doc.getRootElement();                System.out.println(root.getName());                Element name = root.getChild("name");                System.out.println(name.getValue());                root.removeChild("age");                XMLOutputter out= new
  XMLOutputter(Format.getPrettyFormat().setIndent("    "));                out.output(doc,new
  FileOutputStream("jdom2.xml"));     } } | 
| public class JdomTest3 {     public static void main(String[] args) throws Exception     {        //jdom可以从头至尾使用方法链        Document doc = new Document();        doc.addContent(new Element("联系人列表")               .setAttribute("公司", "A集团")               .addContent(                      new Element("联系人")                             .addContent(new Element("姓名").setText("张三"))                             .addContent(new Element("公司").setText("A公司"))                             .addContent(                                    new Element("电话")                                           .setText("(021)566991"))                             .addContent(                                    new Element("地址")                                           .addContent(                                                  new Element("街道")                                                         .setText("5街"))                                           .addContent(                                                  new Element("城市")                                                         .setText("上海市"))                                           .addContent(                                                  new Element("省份")                                                         .setText("上海")))));        XMLOutputter out = new
  XMLOutputter(Format.getPrettyFormat().setIndent(               "    "));        out.output(doc, new
  FileOutputStream("contact.xml"));     } } | 
| import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; public class JdomTest4 {     public static void main(String[] args) throws Exception     {        SAXBuilder builder = new SAXBuilder();        Document doc = builder.build(new File("contact.xml"));        System.out.println(doc);        Element root = doc.getRootElement();        Element first = root.getChild("联系人");        List list = first.getChildren();        for (int i = 0; i < list.size(); i++)        {            Element elem = (Element)
  list.get(i);            System.out.println(elem.getName() + ":" +
  elem.getText());            if (elem.getName().equals("地址"))            {               List list2 = elem.getChildren();               for (int j = 0; j < list2.size(); j++)               {                   Element elem2 = (Element)
  list2.get(j);                   System.out.println(elem2.getName()
  + ":" + elem2.getText());               }            }        }        for (Iterator iter =
  (first.getChildren()).iterator(); iter.hasNext();)        {            Element elem = (Element)
  iter.next();            System.out.println(elem.getName() + ":" +
  elem.getText());            if (elem.getName().equals("地址"))            {               for (Iterator iter2 =
  (elem.getChildren()).iterator(); iter2                      .hasNext();)               {                   Element elem2 = (Element)
  iter2.next();                   System.out.println(elem2.getName()
  + ":" + elem2.getText());               }            }        }     } } | 
Dom4j的使用
| import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class Dom4jTest1 {     public static void main(String[] args) throws Exception     {        /*         * Document doc = DocumentHelper.createDocument();         *          * Element root =
  DocumentHelper.createElement("student");         *          * doc.setRootElement(root);         */        Element root = DocumentHelper.createElement("student");        Document doc = DocumentHelper.createDocument(root);        root.addAttribute("name", "anllin");        Element elem1 = root.addElement("sex");        elem1.addAttribute("age", "30");        XMLWriter xr = new XMLWriter();        xr.write(doc);        OutputFormat format = new OutputFormat("    ", true);        XMLWriter write = new XMLWriter(new
  FileOutputStream("student2.xml"),               format);        write.write(doc);     } } | 
| import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Dom4jTest2 {     public static void main(String[] args) throws Exception     {        SAXReader reader = new SAXReader();        Document doc = reader.read(new File("contactList.xml"));        Element root = doc.getRootElement();        System.out.println(root.getName() + " : " + root.attributeValue("公司"));        Element contact = root.element("联系人");        System.out.println(contact.getName());                for (Iterator iter =
  contact.elementIterator(); iter.hasNext();)        {            Element elem = (Element)
  iter.next();            System.out.println(elem.getName() + " " +
  elem.getText());            if (elem.getName().equals("地址"))            {               for (Iterator iter2 =
  elem.elementIterator(); iter2.hasNext();)               {                   Element elem2 = (Element)
  iter2.next();                   System.out.println(elem2.getName()
  + " " + elem2.getText());               }            }        }                List list = contact.elements();        for (int i = 0; i < list.size(); i++)        {            Element elem = (Element)
  list.get(i);            System.out.println(elem.getName() + " : " + elem.getText());            if (elem.getName().equals("地址"))            {               List list2 =
  elem.elements();               for (int j = 0; j < list2.size(); j++)               {                   Element elem2 = (Element)
  list.get(j);                   System.out.println(elem2.getName()
  + " : "                          + elem2.getText());               }            }        }     } } | 
| import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class Dom4jTest3 {     public static void main(String[] args) throws Exception     {        //dom4j不能从头至尾使用方法链,但是可以在创建元素时使用方法链。        Element root = DocumentHelper        .createElement("联系人列表").addAttribute("公司", "A集团");                Document doc = DocumentHelper.createDocument(root);                Element contact = DocumentHelper.createElement("联系人");                root.add(contact);                Element name = DocumentHelper.createElement("姓名").addText("张三");        Element company = DocumentHelper.createElement("公司").addText("A公司");        Element phone = DocumentHelper.createElement("电话").addText("(021)6559991");        Element address = DocumentHelper.createElement("地址");                contact.add(name);        contact.add(company);        contact.add(phone);        contact.add(address);                Element street = DocumentHelper.createElement("街道").addText("5街");        Element city = DocumentHelper.createElement("城市").addText("上海市");        Element porvince = DocumentHelper.createElement("省份").addText("上海");                address.add(street);        address.add(city);        address.add(porvince);                //输出到控制台        OutputFormat format = new OutputFormat("    ", true);        format.setEncoding("gbk");                XMLWriter xr = new
  XMLWriter(format);         xr.write(doc);                //输出到文件中        XMLWriter write = new XMLWriter(new
  FileOutputStream("contactList.xml"),               format);        write.write(doc);     } } | 
简单工厂模式
工厂类
| package com.anllin.pattern.simplefactory; public class Creator {     public static Product createProduct(String
  str)     {        if("A".equals(str))        {            return new ConcreteProductA();        }        else if("B".equals(str))        {            return new ConcreteProductB();        }                return null;     } } | 
抽象产品类
| package com.anllin.pattern.simplefactory; public abstract class Product { } | 
具体产品类
| package com.anllin.pattern.simplefactory; public class ConcreteProductA extends Product { } public class ConcreteProductB extends Product { } | 
客户端
| package com.anllin.pattern.simplefactory; public class Client {     public static void main(String[] args)     {        Product productA = Creator.createProduct("A");                System.out.println(productA.getClass().getName());                Product productB = Creator.createProduct("B");                System.out.println(productB.getClass().getName());     } } | 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号