Добавить корневой элемент в XML
Я настоящий новичок, так как у меня нет никаких предварительных знаний о программировании на Java.
Сказал, что мне удалось преобразовать некоторый код в рабочий конвертер txt в xml.
Пожалуйста, обратите особое внимание на следующее примечание:
Я не имею ни малейшего понятия о построении кода, вижу в нем кого-то, кто ищет каждую часть с другой страницы и объединяет ее, с небольшой, но большой помощью. Напомните об этом до того, как сообщить об этом вопросе. Спасибо
Учитывая следующий код:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
public class xml{
static class Bean {
int id;
String firstname;
String lastname;
String mail;
public Bean(int id, String firstname, String lastname, String mail) {
super();
this.id = id;
this.firstname = firstname;
this.lastname = lastname;
this.mail = mail;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
}
private XStream xstream = new XStream();
public static void main(String[] args) throws IOException {
new xml().process();
}
private void process() throws FileNotFoundException, IOException {
xstream.alias("item", Bean.class);
BufferedReader br = new BufferedReader(new FileReader("\\test.txt"));
try {
String line = br.readLine();
line = br.readLine();
while (line != null) {
String[] split = line.split("\t");
Bean bean = new Bean(new Integer(split[0]), split[1], split[2], split[3]);
createBeanFile(bean);
line = br.readLine();
}
} finally {
br.close();
}
}
private void createBeanFile(Bean bean) throws IOException {
BufferedWriter bw = new BufferedWriter
(new OutputStreamWriter(new FileOutputStream("\\test.xml"),"UTF-8"));
String str = xstream.toXML(bean);
bw.write(str);
bw.close();
}
}
Как и где я могу добавить корневой элемент, чтобы изменить мой текущий вывод из этого:
<item>
<id>56885</id>
<firstname>LYTF</firstname>
<lastname>LPRT</lastname>
<mail>LYTF_LPRT@DERP.COM</mail>
</item>
К этому:
<root>
<item>
<id>56885</id>
<firstname>LYTF</firstname>
<lastname>LPRT</lastname>
<mail>LYTF_LPRT@DERP.COM</mail>
</item>
</root>
1 ответ
Я призываю вас изучить, как работает библиотека XStreams, вместо того, чтобы копировать существующий (плохо реализованный код), и попытаться изменить его в соответствии с вашими потребностями.
Что вы можете сделать, это добавить корневой класс, который содержит коллекцию ваших элементов.
static class Root{
List<Item> item = new ArrayList<Item>();
public List<Item> getitem() {
return item;
}
public void setBeans(List<Item> item) {
this.item = item;
}
}
в своем методе процесса вы затем устанавливаете следующие свойства в xStream.
xstream.alias("root", Root.class);
xstream.alias("item", Item.class); //I renamed the bean class to item here.
xstream.addImplicitCollection(Root.class, "item");
и в вашем цикле while вы добавляете элементы в корневой класс и записываете XML после цикла.
while (line != null) {
String[] split = line.split(",");
Item item = new Item(new Integer(split[0]),split[1]);
root.getitem().add(item);
line = br.readLine();
}
createBeanFile(root);
Надеюсь, это поможет вам.