我有文本文件,我想将其转换为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();
}
}
答案 0 :(得分:3)
答案 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)
您需要一个循环来逐行读取文件,我建议使用BufferedReader
。
在循环内部,您正在检查以“联系人”开头和结尾的行序列。其中每个都是XML Element
。在这些序列中,您可以为每个数据项创建XML Element
,即Firstname,Secondname,Email,URL。
您可以尝试使用它来创建InternetAddress
,以查看某个行是否为电子邮件地址。您可以尝试从中创建URL
来检查某行是否为网址。
编写XML输出有两种策略。最简单的方法是在内存中构建整个XML文档,然后在完全读取输入文件后将其写入文件。如果您的输入文件非常大,这可能不实用,您可能需要在开始下一个之前将每个联系人Element
写入输出流。