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());
}
}
|