文本文件到xml转换java

时间:2011-06-17 08:15:46

标签: java xml text

我有文本文件,我想将其转换为java中的XML文件: 在java中读取文件,然后转换为xml。

Contact
Arun_niit
Arun_niit
nura_e@yahoo.co.in
Contact
Contact
Bống MũnHải
Hải Anh Bống Mũn
http://www.facebook.com/profile.php?id=689849077
Contact

我想按以下顺序输出:

<contact>
<Firstname>Arun_niit</Firstname>
<Secondname>Arun_niit</Secondname>
<Email>nura_e@yahoo.co.in</Email>
</contact>
<contact>
<Firstname>Bống MũnHải</Firstname>
<Secondname>Hải Anh Bống Mũn</Secondname>
<URL>http://www.facebook.com/profile.php?id=689849077</URL>
</contact>

请帮助我们&amp;示例代码将受到高度赞赏。

这是正确的做法,请... [代码]

  import java.io.*;
  import java.io.ObjectInputStream.GetField;
  import org.w3c.dom.*;
  import javax.xml.parsers.*;
  import javax.xml.transform.*;
  import javax.xml.transform.stream.*;
  import javax.xml.transform.dom.*;
  import java.util.Scanner;

public class Item  {

private String Name;
private String LName;
private String Email;
public static void main (String args[]) {

public static void readFile(File file)  
{
Scanner freader = new Scanner("D:/juin17.part");
String line = null;
while (freader.hasNextLine()) {
    line = freader.nextLine();
   if(line==contact){
Item item = new item();
    item.Name =freader.nextLine();
    item.LName =freader.nextLine();
    item.Email =freader.nextLine();
    freader.nextLine();
    }
    itemList.add(item);
}
freader.close();  
  }

 FileOutputStream fos = new FileOutputStream(info.file);
 OutputFormat of = new OutputFormat("XML","windows-1250",true);
 of.setIndent(1);
 of.setIndenting(true);
 ContentHandler hd = serializer.asContentHandler();
 hd.startDocument();
 AttributesImpl atts = new AttributesImpl();
 hd.startElement("","",info.category,atts);
 for (int i=0;i<itemList.size();i++)
{
   atts.clear();
    Item temp = new Item();
    temp = itemList.get(i);
    hd.startElement("","","FirstName",atts);
    hd.characters(temp.Name.toCharArray(),0,temp.Name.length());
    hd.endElement("","","FirstName");
    hd.startElement("","","LastName",atts);
    hd.characters(temp.LName.toCharArray(),0,temp.LName.length());
    hd.endElement("","","LastName");
    hd.startElement("","","Email",atts);
    hd.characters(temp.mail.toCharArray(),0,temp.mail.length());
    hd.endElement("","","EMail");
 }
 hd.endElement("","",info.category);
 hd.endDocument();
 fos.close();
 }
 }

4 个答案:

答案 0 :(得分:3)

here是使用DOM创建xml的示例 我认为你可以根据自己的目的改变它。

如果你想要的只是从文本创建一个xml我认为它比使用SAX更简单

希望这会有所帮助。

答案 1 :(得分:1)

  import java.io.BufferedReader;
  import java.io.FileOutputStream;
  import java.io.FileReader;
  import java.util.regex.Pattern;
  import org.xml.sax.ContentHandler;
  import com.sun.org.apache.xml.internal.serialize.OutputFormat;
  import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
  import com.sun.xml.internal.bind.util.AttributesImpl;
  public class Item  {
  public static void main (String args[]) {
  item.readWrite("juin17.part","test.xml");
  }

  public static void readWrite(String fromFile, String toFile)  
  {
try{
    Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
    BufferedReader in = new BufferedReader(new FileReader(fromFile));
    FileOutputStream fos = new FileOutputStream(toFile);
    OutputFormat of = new OutputFormat("XML","windows-1250",true);
    of.setIndent(1);
    of.setIndenting(true);
    XMLSerializer serializer = new XMLSerializer(fos,of);
    ContentHandler hd = serializer.asContentHandler();
    hd.startDocument();
    AttributesImpl atts = new AttributesImpl();
    hd.startElement("","","CONTACTS",atts);
    String line = null,tag;
    while ((line=in.readLine())!=null) {
        if(line.equals("Contact")){
            line=in.readLine();
            hd.startElement("","","CONTACT",atts);
            int i=0;
            while(!line.equals("Contact")){
                if(i==0)
                    tag="FirstName";
                else if(i==1)
                    tag="LastName";
                else{
                    if(p.matcher(line).matches())
                        tag="EMail";
                    else
                        tag="URL";
                }
                hd.startElement("","",tag,atts);
                hd.characters(line.toCharArray(),0,line.length());
                hd.endElement("","",tag);
                i++;
                line=in.readLine();
            }
            hd.endElement("","","CONTACT");
        }
    }
    hd.endElement("","","CONTACTS");
    hd.endDocument();
    fos.close();
    in.close();
    }catch(Exception E){
        System.out.println("Cannot Generate XML!!!");
    }

  }
  }

答案 2 :(得分:0)

    public static void readFile(File file)  {
    Scanner freader = new Scanner(file);
    String line = null;
    while (freader.hasNextLine()) {
        line = freader.nextLine();
       if(line==contact){
    Item item = new item();
        item.Name =freader.nextLine();
        item.LName =freader.nextLine();
        item.Email =freader.nextLine();
        freader.nextLine();
        }
        itemList.add(item);
    }
    freader.close();  
   }

这将帮助您阅读文件。这里Item是一个{Name,LName,Email}的类,itemList是一个数组列表,所以,第一部分我读取文件并将其存储在数组列表中,然后使用arrayList创建XML文件。尝试合并两者,即同时读取和写入XML。

答案 3 :(得分:0)

  1. 您需要一个循环来逐行读取文件,我建议使用BufferedReader

  2. 在循环内部,您正在检查以“联系人”开头和结尾的行序列。其中每个都是XML Element。在这些序列中,您可以为每个数据项创建XML Element,即Firstname,Secondname,Email,URL。

  3. 您可以尝试使用它来创建InternetAddress,以查看某个行是否为电子邮件地址。您可以尝试从中创建URL来检查某行是否为网址。

  4. 编写XML输出有两种策略。最简单的方法是在内存中构建整个XML文档,然后在完全读取输入文件后将其写入文件。如果您的输入文件非常大,这可能不实用,您可能需要在开始下一个之前将每个联系人Element写入输出流。