假如有以下两个实例,怎么样把这两个实例以SAX、DOM两种方式输出到XML文件里呢?请各位大侠多多指教。package basic.tech;public class Person {
String name ;
int age ;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}

public static void main(String[] args) {
Person p1 = new Person("Tom",20);
Person p2 = new Person("Jack",20);
//如何用SAX技术把两个实例写到XML文件?

//如何用DOM技术把这两实例写到XML文件?
}
}

解决方案 »

  1.   

    sax还没听过写xml呢。
    public String toXML() {
        StringBuffer xml = new StringBuffer("<?xml version="1.0" encoding="UTF-8"?>");
        xml.append("<person>");
        xml.append("<name>");
        xml.append(name);
        xml.append("</name>");
        xml.append("<age>");
        xml.append(age);
        xml.append("</age>");
        xml.append("</person>");
    }这是手工拼的,然后自己写入文件吧。
    如果你懂反射的话,可以写个动态的。
      

  2.   

    直接上代码:
    public void CreateXmlTest() throws IOException,JDOMException { 
             Element root,rootIn, element, text; 
             Document Doc; 
             // 创建一个根目录 
             root = new Element("employees_information"); 
             System.out.println(root);
             // 把这个根目录放入XML文件中 
             Doc = new Document(root); 
             // 得到文档中的根目录 
             root = Doc.getRootElement(); 
             System.out.println(root);
             
             // 创建一个name的子对象 
             element = new Element("姓名"); 
             // 设置他的值为"C.Y. Shen" 
             text = element.setText("陈浩");     
             // 设置name的一个属性emp_id并且给其赋值001 
             text = element.setAttribute("emp_id", "001"); 
             // 用root将其加载到 
             element = root.addContent(text); 
             
             // 创建一个age的子对象 
             element = new Element("年龄"); 
             text = element.setText("43"); 
             element = root.addContent(text); 
             // 创建一个sex的子对象 
             element = new Element("性别"); 
             text = element.setText("Male"); 
             element = root.addContent(text);          // 创建XML输出的对象 
             XMLOutputter XMLOut = new XMLOutputter(); 
             //XMLOut.setEncoding("gb2312"); 
             XMLOut.output(Doc, new FileOutputStream("d://test1.xml")); 
             element=root.getChild("年龄");
             root.removeContent(element);
             
         } 
      

  3.   

    您好!生成、解析Xml的方式一共有四种,分别为Dom,Sax,Dom4j,Jdom.对于您以上的要求我就只给出生成xml的。解析要有兴趣了也可以找些资料自己研究研究。Dom生成、解析:优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。public static void main(String[] args) {
    String fileName = "file/ccperson.xml";
    createXml(fileName);
    }

    public static void createXml(String fileName) {

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder;
    try {
    builder = factory.newDocumentBuilder();
    Document doc = builder.newDocument(); 
    Element root = doc.createElement("person"); 
    doc.appendChild(root); 

    Element p1 = doc.createElement("p1"); 
    p1.setAttribute("age", "20");
    p1.setAttribute("name", "Tom");
    root.appendChild(p1);

    Element p2 = doc.createElement("p2"); 
    p2.setAttribute("age", "20");
    p2.setAttribute("name", "Jack");
    root.appendChild(p2);

    TransformerFactory tf = TransformerFactory.newInstance(); 
    Transformer transformer = tf.newTransformer(); 
    DOMSource source = new DOMSource(doc); 
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
    transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
    PrintWriter pw = new PrintWriter(new FileOutputStream(fileName)); 
    StreamResult result = new StreamResult(pw); 
    transformer.transform(source, result); 
    System.out.println("生成XML文件成功!"); 

    } catch (ParserConfigurationException e) {
    e.printStackTrace();
    }catch(Exception e){
    e.printStackTrace();

    }  结果成功!Sax生成、解析:优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少; 
    public static void main(String[] args) {
    String fileName = "file/ccSax.xml";
    createXml(fileName);
    }

    public static void createXml(String fileName) { 

     // 创建SAX转换工厂
            SAXTransformerFactory sff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
            
            // 转换处理器,侦听 SAX ContentHandler
            // 解析事件,并将它们转换为结果树 Result
            TransformerHandler th = null;
            Transformer transformer = null;
    try {
    th = sff.newTransformerHandler();
     // 将源树转换为结果树
            transformer = th.getTransformer();
    } catch (TransformerConfigurationException e) {
    e.printStackTrace();
    }
            // 设置字符编码
            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
            // 是否缩进
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            
            StringWriter writerStr = new StringWriter();  
            Result resultStr = new StreamResult(writerStr);  
            //setResult() 必须在 startDocument() 之前调用
            th.setResult(resultStr);
            
            String xmlStr = null;
            try {
    th.startDocument();
    AttributesImpl attr = new AttributesImpl();
    th.startElement("", "", "person", attr);

                th.startElement("", "", "p1", attr);
                th.startElement("", "", "name", attr);
                String name = "Tom";
                th.characters(name.toCharArray(), 0, name.length());
                th.endElement("", "", "name");            th.startElement("", "", "age", attr);
                String age = "23";
                th.characters(age.toCharArray(), 0, age.length());
                th.endElement("", "", "age");
                th.endElement("", "", "p1");
                
                th.startElement("", "", "p2", attr);
                th.startElement("", "", "name", attr);
                name = "Jack";
                th.characters(name.toCharArray(), 0, name.length());
                th.endElement("", "", "name");            th.startElement("", "", "age", attr);
                age = "30";
                th.characters(age.toCharArray(), 0, age.length());
                th.endElement("", "", "age");
                th.endElement("", "", "p2");

    th.endElement("", "", "person");  
    th.endDocument();  
            } catch (SAXException e) {
    e.printStackTrace();
    }
            xmlStr = writerStr.getBuffer().toString();
            System.out.println(xmlStr);
            System.out.println("xml文件生成成功!");


    Dom4j生成、解析:DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件
    public static void main(String[] args) {
    String fileName = "file/ccuser.xml";
    Document doc = createXml(fileName);
    System.out.println(doc.asXML());
    System.out.println("-----------------------------------");
    parseXml(doc);
    }

    public static Document createXml(String fileName){

    Document doc = DocumentHelper.createDocument();
    Element ccUsers = doc.addElement("ccUsers");
    Element employees = ccUsers.addElement("employees");
    employees.addAttribute("name", "employeeList");
    Element employee = employees.addElement("employee");
    employee.addAttribute("name", "zhijun");
    employee.addAttribute("age", "22");
    employee.addAttribute("hobbie", "basketball");

    employee = employees.addElement("employee");
    employee.addAttribute("name", "you");
    employee.addAttribute("age", "22");
    employee.addAttribute("hobbie", "football");

    Element users = ccUsers.addElement("users");
    users.addAttribute("name", "userList");
    users.addAttribute("method", "getName");
    Element user = users.addElement("user");
    Element name = user.addElement("name");
    name.setText("wei");
    Element age = user.addElement("age");
    age.setText("23");
    Element hobbie = user.addElement("hobbie");
    hobbie.setText("foot");

    user = users.addElement("user");
    name = user.addElement("name");
    name.setText("mei");
    age = user.addElement("age");
    age.setText("19");
    hobbie = user.addElement("hobbie");
    hobbie.setText("song");

    try {
    OutputFormat format = OutputFormat.createPrettyPrint();  //缩减型
    // OutputFormat format = OutputFormat.createCompactFormat();//紧凑型格式
    Writer w = new FileWriter(fileName);
    XMLWriter xmlWriter = new XMLWriter(w,format); 
    xmlWriter.write(doc);
    xmlWriter.close();

    } catch (IOException e) {
    e.printStackTrace();
    }
    return doc;
    }Jdom生成、解析:为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。 
     由于我没jdom的jar包。此方式就不给你写了。最后,祝你学习越快!
      

  4.   

    jdom 
    SAXBuilder builder = new SAXBuilder();
    Document doc = builder.build("src/xml/po.xml");   //获得文档对象  
    Element root = doc.getRootElement();          //获得根节点   //添加新元素  
    Element element = new Element("person");
    Element element1 = new Element("username");
    element1.setText("zhangdaihao");
    Element element2 = new Element("password");
    element2.setText("mima");
    element.addContent(element1);
    element.addContent(element2);
    root.addContent(element);
    doc.setRootElement(root); //文件处理  
    XMLOutputter out = new XMLOutputter();
    out.output(doc, new FileOutputStream("src/xml/po.xml"));