java学习第二十八天之XML解析

来源:互联网 发布:ubuntu创建新用户组 编辑:程序博客网 时间:2024/05/05 20:26

其一

package stage3.htmlcss.demo;public interface A {    public void show();}
package stage3.htmlcss.demo;public class Animal1 implements A{    public void show() {        System.out.println("这是第一个实现类!");    }}
package stage3.htmlcss.demo;public class Animal2 implements A{    public void show() {        System.out.println("这是第二个实现类!");    }}
package stage3.htmlcss.demo;import java.io.IOException;public class Test {    /**    * @param args     * @throws IOException     */    public static void main(String[] args) throws IOException {        B a=BeanFactory.getBean(B.class);        a.show();    }}
package stage3.htmlcss.demo;import java.io.FileInputStream;import java.io.IOException;import java.util.Properties;public class BeanFactory {    private static Properties properties =new Properties();    static{//      1、读取配置文件        try {            properties.load(new FileInputStream("src/BeanFactory.properties"));        } catch (Exception e) {            // TODO: handle exception            e.printStackTrace();        }    }    public static <T> T getBean( Class<T> c) throws IOException {           try {            //2、取出哪个类            String className=properties.getProperty(c.getSimpleName());//          3、根据完整类名创建实例并返回            Class<T> class1=(Class<T>)Class.forName(className);            return class1.newInstance();        } catch (Exception e) {            // TODO: handle exception            e.printStackTrace();        }        return null;    }}
B=stage3.htmlcss.demo.Bnimal1

其二 调用不同的对象

package stage3.htmlcss.demo;public interface B {    public void show();}
package stage3.htmlcss.demo;public class Bnimal1 implements B{    public void show() {        System.out.println("这是第一个实现类!");    }}

jasp解析XML

package stage3.htmlcss.demo;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;//import javax.xml.soap.Node;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class Demo1 {    /**     * 获得所有学生信息    * @param args    *1、获得jasp工厂    *2、通过工厂获得解析器实现类    *3、使用解析器加载xml文档   ===> document    */    public static void main(String[] args) {        //获得jasp工厂        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//      通过工厂获得解析器实现        try {            DocumentBuilder builder=factory.newDocumentBuilder();//          使用解析器加载xml文档  ===>document            Document document=builder.parse(new File("src/students.xml"));//          获得所有学生元素的集合            NodeList studentList=document.getElementsByTagName("student");//          遍历集合            for (int i = 0; i < studentList.getLength(); i++) {                Element stuEle=(Element) studentList.item(i);//              获得学生的number属性                String number =stuEle.getAttribute("number");                System.out.println("学生的学号是"+number);//              获得学生节点下的所有子节点(包括文本在内一共7个)                NodeList children=stuEle.getChildNodes();//              遍历集合并提取出我们想要的name,age,sex元素对象                for (int j = 0; j < children.getLength(); j++) {                    Node node = (Node) children.item(j);//                  方式二                    if(node.getNodeType()==Node.ELEMENT_NODE){                        Element child=(Element) node;                        if(child.getNodeName().equals("name")){                            String name=child.getTextContent();                            System.out.println("学生的姓名是"+name);                        }else if(child.getNodeName().equals("age")){                            String age=child.getTextContent();                            System.out.println("学生的年龄是"+age);                        }else if(child.getNodeName().equals("sex")){                            String sex=child.getTextContent();                            System.out.println("学生的性别是"+sex);                        }                    }                }            }           } catch (Exception e) {            // TODO: handle exception            e.printStackTrace();        }    }}
package stage3.htmlcss.demo;import java.io.File;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;public class Demo2 {    public static void main(String[] args) throws Exception {//      获得解析器工厂类        SAXParserFactory factory=SAXParserFactory.newInstance();//      获得解析器        try {            SAXParser parser=factory.newSAXParser();            parser.parse(new File("src/students.xml"), new Myhandler());        } catch (ParserConfigurationException | SAXException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }//      解析文档    }}
package stage3.htmlcss.demo;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;//获得所有学生信息并打印出来public class Myhandler extends DefaultHandler{    @Override    public void startDocument() throws SAXException {        // TODO Auto-generated method stub            System.out.println("文档开始解析啦!");    }    @Override    //参数3告诉开发者当前的元素时那个元素//  参数4将标签上的属性提供给你//  SAX 1.0的版本中前两个参数没有用,永远是null    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {        // TODO Auto-generated method stub        System.out.println("元素解析开始啦!");//      判断当前元素遇到的元素是否是student元素        if(qName.equals("student")){            String number= attributes.getValue("number");            System.out.println("学生的学号是:"+number);        }    }       @Override    public void characters(char[] ch, int start, int length) throws SAXException {        // TODO Auto-generated method stub        String strs=new String(ch, start, length);        strs=strs.trim();//去掉两端的空白字符 回车 空格  制表符        if (strs.length()>0) {            System.out.println(strs);        }           }    @Override    public void endElement(String uri, String localName, String qName) throws SAXException {        // TODO Auto-generated method stub        System.out.println(qName+"元素结束啦");    }    @Override    public void endDocument() throws SAXException {        // TODO Auto-generated method stub        System.out.println("文档解析结束啦!");    }}

students.xml

<?xml version="1.0" encoding="utf-8" ?><!--<!DOCTYPE students SYSTEM "students.dtd">  --><students>    <student number="001">        <name>小明</name>        <age>8</age>        <sex></sex>    </student>     <student number="002">        <name>小花</name>        <age>8</age>        <sex></sex>    </student></students>

DOM4j解析XML

package my.xmlparse.dom4j;import java.io.File;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.io.SAXReader;public class Demo1 {    public static void main(String[] args) {        SAXReader reader=new SAXReader();        try {            Document document=reader.read(new File("src/students.xml"));            System.out.println(document.asXML());//将document.asXML()由xml转成String类型        } catch (DocumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
package my.xmlparse.dom4j;import java.io.File;import java.util.Iterator;import java.util.jar.Attributes.Name;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.omg.PortableInterceptor.AdapterManagerIdHelper;//查询出所有学生的所有信息public class Demo2 {    public static void main(String[] args) {        SAXReader reader=new SAXReader();        try {            Document document=reader.read(new File("src/students.xml"));//          首先要获得根元素            Element root=(Element) document.getRootElement();//          迭代根元素下的所有名叫student的子元素            for(Iterator<Element> iterator=root.elementIterator("student");iterator.hasNext();){                Element student=iterator.next();//              获得student元素的number属性                String number=student.attributeValue("number");//获取的是元素的属性值//              student子元素的内容(Name,AdapterManagerIdHelper sex)                String name=student.elementText("name");                String age=student.elementText("age");                String sex=student.elementText("sex");                System.out.println("当前学生的学号是:"+number+",姓名是:"+name+",年龄是:,"+age+"性别是:"+sex);            }//          System.out.println(document.asXML());//将document.asXML()由xml转成String类型        } catch (DocumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
package my.xmlparse.dom4j;import java.io.File;import java.util.Iterator;import java.util.List;import java.util.jar.Attributes.Name;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.omg.PortableInterceptor.AdapterManagerIdHelper;//查询出所有学生的所有信息public class Demo2_2 {    public static void main(String[] args) {        SAXReader reader=new SAXReader();        try {            Document document=reader.read(new File("src/students.xml"));//          首先要获得根元素            Element root=(Element) document.getRootElement();//          迭代根元素下的所有名叫student的子元素            List<Element> list=root.elements("student");            for(Element student:list){//              Element student=iterator.next();//              获得student元素的number属性                String number=student.attributeValue("number");//获取的是元素的属性值//              student子元素的内容(Name,AdapterManagerIdHelper sex)                String name=student.elementText("name");                String age=student.elementText("age");                String sex=student.elementText("sex");                System.out.println("当前学生的学号是:"+number+",姓名是:"+name+",年龄是:"+age+",性别是:"+sex);            }//          System.out.println(document.asXML());//将document.asXML()由xml转成String类型        } catch (DocumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
package my.xmlparse.dom4j;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.util.Iterator;import java.util.jar.Attributes.Name;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.omg.PortableInterceptor.AdapterManagerIdHelper;//增加一个学生元素 003 小王八 2 男public class Demo3 {    public static void main(String[] args) {        SAXReader reader=new SAXReader();        try {            Document document=reader.read(new File("src/students.xml"));//          获得根元素            Element root=document.getRootElement();//          添加element,添加number属性            Element stuEle=root.addElement("student").addAttribute("number", "003");//          添加name age sex子元素并添加子元素中的文本            stuEle.addElement("name").addText("小王八");            stuEle.addElement("age").addText("2");            stuEle.addElement("sex").addText("男");//          将document对象写到文件中//          创建格式化器            OutputFormat format=OutputFormat.createPrettyPrint();            try {                format.setEncoding("utf-8");//改方法设置文档的encoding 方法//              创建写入器//              XMLWriter writer=new XMLWriter(new FileWriter("src/students_copy.xml"),format);//              XMLWriter writer=new XMLWriter(new PrintWriter("src/students_copy.xml","utf-8"),format);                XMLWriter writer=new XMLWriter(new FileOutputStream("src/students_copy.xml"),format);//使用字节流绝对不会出现乱码//              写入                writer.write(document);//              关闭资源                writer.close();            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }//          添加name,age,sex子元素,并添加子元素中的文本//          将dom对象写到文件中        } catch (DocumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
package my.xmlparse.dom4j;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.util.Iterator;import java.util.jar.Attributes.Name;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.omg.PortableInterceptor.AdapterManagerIdHelper;//删除一个学生元素 001public class Demo4 {    public static void main(String[] args) throws Exception, FileNotFoundException {        SAXReader reader=new SAXReader();        try {            Document document=reader.read(new File("src/students.xml"));//          获得根元素            Element root=document.getRootElement();//          使用xpath找到我们需要的元素//              定义xpath            String xpath="//student[@number='001']";            Element student=(Element) document.selectSingleNode(xpath);//          删除            boolean flag=student.getParent().remove(student);            System.out.println(flag);//          可写            XMLWriter writer=new XMLWriter(new FileOutputStream("src/students_copy_2.xml"),OutputFormat.createPrettyPrint());            writer.write(document);            writer.close();//          获得所有元素    /*                  下面的思路可以但是效率太低            遍历            判断==>number属性是否为要删除的                    是===>删除                    不是    */                      } catch (DocumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
package my.xmlparse.dom4j;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.util.Iterator;import java.util.jar.Attributes.Name;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.omg.PortableInterceptor.AdapterManagerIdHelper;//修改一个学生 001 ==>大黑 1 femalepublic class Demo5 {    public static void main(String[] args) throws Exception, FileNotFoundException {        SAXReader reader=new SAXReader();        try {            Document document=reader.read(new File("src/students.xml"));//          1、定义xpath表达式            String xpath="//student[@number=001]";//          2、定义xpath查找            Element studentEle=(Element) document.selectSingleNode(xpath);//          3.修改student元素的子元素的name sex,age            studentEle.element("name").setText("大黑");            studentEle.element("age").setText("1");            studentEle.element("sex").setText("女");//          回写            XMLWriter writer=new XMLWriter(new FileOutputStream("src/students_3.xml"),OutputFormat.createPrettyPrint());            writer.write(document);            writer.close();        } catch (DocumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
0 0