我目前是需要从原来的一个XML文件读取相关数据,然后将数据输出到另外一个XML格式!其中两种格式不一样,请见如下两种格式!原来的XML格式是:
<school>
   <Att>
       <Field> Name </Field>
       <Length> 10 </Length>
       <Type> Nvarchar </Type>
       <Data> 张美丽 </Data>
   </Att>
   <Att>
       <Field> Age </Field>
       <Length> 3 </Length>
       <Type> Int </Type>
       <Data> 22 </Data>
   </Att>
   <Att>
       <Field> BirthDay </Field>
       <Length> 10 </Length>
       <Type> DataTime </Type>
       <Data> 1988.12.01 </Data>
   </Att>
   <Att>
       <Field> Address </Field>
       <Length> 50 </Length>
       <Type> Nvarchar </Type>
       <Data> XXXXXXX </Data>
   </Att></school>以上是原始格式,现在需要输入如下格式:<school>
   <Att>
       <Name > 张美丽 </Name >
       <Age > 22 </Age >
       <BirthDay >  1988.12.01 </BirthDay >
       <Address > XXXXXXX  </Address >
   </Att></school>这段输出的代码如何写,请各位帮帮忙!谢谢了!回答对了,马上给分!

解决方案 »

  1.   

    循环得到Field和Data的值。   然后生成Att包裹<Field>Data</Field>很简单的啊。 如果写不出来我帮你写。太晚了。先睡觉哦了
      

  2.   

    package net.test;import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Iterator;import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import org.dom4j.Document;
    import org.dom4j.io.XMLWriter;public class ReadXML {
    public static void main(String[] args) {
    SAXReader reader = new SAXReader();
    try {
    Document doc = reader.read("E:/workspace/SOA/src/net/test/MyXml.xml");
    Document doc1 = DocumentHelper.createDocument();
    Element root = doc.getRootElement();
    Element root1 = doc1.addElement(root.getName());
    Element att1 = root1.addElement("Att");
    Iterator elements = root.elementIterator("Att");
    while(elements.hasNext()) {
    Element att = (Element)elements.next();
    Element field = att1.addElement(att.elementText("Field"));
    field.addText(att.elementText("Data"));
    System.out.println(field.getText());
    }
    XMLWriter output = new XMLWriter(new FileWriter(new File("E:/workspace/SOA/src/net/test/NewFile.xml")));
    output.write(doc1);
    output.close();
    } catch (DocumentException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    就是中文乱码了, 其他的能输出, 我找找原因。 好了再告诉你
      

  3.   

    package com.tong;import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Iterator;import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;public class Test { /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    //读取并解析 XML 文档
    SAXReader reader=new SAXReader(); 
    StringBuffer writesb = new StringBuffer();
    writesb.append("<?xml version=\"1.0\" encoding=\"gb2312\" ?> ");
    writesb.append("<school>");
    try {
    Document document = reader.read(new File("test.xml"));
    Element  root = document.getRootElement();
    Document doc1 = DocumentHelper.createDocument();
    Element root1 = doc1.addElement(root.getName());
    Element att1 = root1.addElement("Att");
                Iterator elements = root.elementIterator("Att");
                while(elements.hasNext()) {
                    Element att = (Element)elements.next();
                    Element field = att1.addElement(att.elementText("Field"));
                    field.addText(att.elementText("Data"));
                    System.out.println(field.getText());
                }
                OutputFormat format = OutputFormat.createPrettyPrint();      
                format.setEncoding("gb2312");           
                XMLWriter  writer = new XMLWriter(new FileWriter("2.xml"), format);           
                writer.write(doc1);      
                writer.close(); 

    } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }}我是在楼上的基础上进行了改进,解决了中文乱码问题!
      

  4.   

    package net.test;import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Iterator;import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.Document;
    import org.dom4j.io.XMLWriter;public class ReadXML {
    public static void main(String[] args) {
    SAXReader reader = new SAXReader();
    try {
    Document doc = reader.read("E:/workspace/SOA/src/net/test/MyXml.xml");
    Document doc1 = DocumentHelper.createDocument();
    Element root = doc.getRootElement();
    Element root1 = doc1.addElement(root.getName());
    Element att1 = root1.addElement("Att");
    Iterator elements = root.elementIterator("Att");
    while(elements.hasNext()) {
    Element att = (Element)elements.next();
    Element field = att1.addElement(att.elementText("Field"));
    field.addText(att.elementText("Data"));
    System.out.println(field.getText());
    }
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("GBK");
    XMLWriter output = new XMLWriter(new FileWriter("E:/workspace/SOA/src/net/test/NewFile.xml"),format);
    output.write(doc1);
    output.close();
    } catch (DocumentException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    恩, 这下可以了, 我新手,代码写的不好看, 勿见怪!
      

  5.   

    怎么在这写相对路径啊?我写了没用,我的java文件和xml文件在同一个文件夹下面啊