XML的解析

来源:互联网 发布:消防工程师软件 编辑:程序博客网 时间:2024/05/16 14:23

XML (extensible markup language) 可扩展标记语言

dom解析XML

public static void printNodeAttr(Node node){NamedNodeMap namedNodeMap = node.getAttributes();for(int i = 0;i < namedNodeMap.getLength();i++){Node attrNode = namedNodeMap.item(i);System.out.println(attrNode.getNodeName()+":"+attrNode.getFirstChild().getNodeValue());}}public static void main(String[] args) {DocumentBuilderFactory factory =  DocumentBuilderFactory.newInstance();try {DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse("src/students.xml");NodeList nodeList = doc.getElementsByTagName("students");Element element = (Element)nodeList.item(0);NodeList studentsNodeList = element.getElementsByTagName("student");System.out.println(studentsNodeList.getLength());for(int i=0;i < studentsNodeList.getLength();i++){Element e = (Element) studentsNodeList.item(i);System.out.println("姓名: "+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());printNodeAttr(e.getElementsByTagName("name").item(0));System.out.println("性别: "+e.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue());System.out.println("年龄: "+e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());System.out.println("===========");}} catch (Exception e) {e.printStackTrace();}}

SAX解析XML  继承DefaultHandler  重载5个读取xml的方法,存入Bean中,再打印

public class SAX2 extends DefaultHandler{private List<Student> students = null;private Student student = null;private String preTag=null;// 标记上一个节点名称@Overridepublic void startDocument() throws SAXException {students = new ArrayList<Student>();System.out.println("开始读取学生信息");}@Overridepublic void endDocument() throws SAXException {System.out.println(" \n 学生信息读取完毕");}@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {if("student".equals(qName)){student = new Student();student.setId(attributes.getValue(0));}preTag=qName;}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {if("student".equals(qName)){students.add(student);student=null;}preTag=null;}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {if(preTag!=null){String content = new String(ch,start,length);if("name".equals(preTag)){student.setName(content);}else if("sex".equals(preTag)){student.setSex(content);}else if("age".equals(preTag)){student.setAge(Integer.parseInt(content));}}}public static void main(String[] args) throws Exception{SAXParserFactory factory= SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();SAX2 sax2 = new SAX2();parser.parse("src/students.xml",sax2);System.out.println(sax2.students);for (Student s : sax2.students) {System.out.println(s);}}}

DOM4J生成与解析XML

public class DOM4J1 {public static void main(String[] args) {Document document = DocumentHelper.createDocument();Element studentElement =  document.addElement("student");studentElement.addAttribute("id","001");studentElement.addAttribute("aa","xx");Element name = studentElement.addElement("name");name.setText("张三");Element sex = studentElement.addElement("sex");sex.setText("男");Element age = studentElement.addElement("age");age.setText("20");OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");try {XMLWriter writer = new XMLWriter(new FileOutputStream("src/student3.xml"),format);writer.write(document);writer.close();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
public class DOM4J2 {public static void main(String[] args)throws Exception {SAXReader saxReader = new SAXReader();Document document = saxReader.read("src/students.xml");Element rootElement =  document.getRootElement();Iterator iter = rootElement.elementIterator();while(iter.hasNext()){Element studentElement =  (Element) iter.next();System.out.println("学号"+studentElement.attributeValue("id"));System.out.println("姓名"+studentElement.elementText("name"));System.out.println("性别"+studentElement.elementText("sex"));System.out.println("年龄"+studentElement.elementText("age"));}}}

JDOM总体思想和DOM4J差不多,但是效率和形式不如DOM4J。


0 0