Привет, подскажите пожалуйста можно ли с помощью apache digister из ява объекта сгенерировать xml? Искал примеры, но нашёл только в обратную сторону, т.е. из xml в ява объект, а обратно ни одного примера не нашёл... Может у кого-нибудь есть пример как это можно сделать ? Пример из xml в ява: | Код | import java.io.File;
import org.apache.commons.digester.Digester; import org.apache.commons.digester.xmlrules.DigesterLoader;
public class XmlRulesDriver { public static void main(String[] args) { try { File input = new File("catalog.xml"); File rules = new File("rules.xml");
Digester digester = DigesterLoader.createDigester(rules.toURI() .toURL());
Catalog catalog = (Catalog) digester.parse(input); System.out.println(catalog.toString()); } catch (Exception exc) { exc.printStackTrace(); } } }
|
| Код | public class Article { private String headline; private String page;
public Article() { }
public void setHeadline(String rhs) { headline = rhs; }
public void setPage(String rhs) { page = rhs; }
public String toString() { return "Article: Headline='" + headline + "' on page='" + page + "' "; } }
|
| Код | public class Book { private String author; private String title;
public Book() { }
public void setAuthor(String rhs) { author = rhs; }
public void setTitle(String rhs) { title = rhs; }
public String toString() { return "Book: Author='" + author + "' Title='" + title + "'"; } }
|
| Код | import java.util.ArrayList; import java.util.List;
public class Catalog { private List<Book> books; private List<Magazine> magazines;
public Catalog() { books = new ArrayList<Book>(); magazines = new ArrayList<Magazine>(); }
public void addBook(Book rhs) { books.add(rhs); }
public void addMagazine(Magazine rhs) { magazines.add(rhs); }
public String toString() { String newline = System.getProperty("line.separator"); StringBuffer buf = new StringBuffer();
buf.append("--- Books ---").append(newline); for (int i = 0; i < books.size(); i++) { buf.append(books.get(i)).append(newline); }
buf.append("--- Magazines ---").append(newline); for (int i = 0; i < magazines.size(); i++) { buf.append(magazines.get(i)).append(newline); }
return buf.toString(); } }
|
| Код | import java.util.ArrayList; import java.util.List;
public class Magazine { private String name; private List<Article> articles;
public Magazine() { articles = new ArrayList<Article>(); }
public void setName(String rhs) { name = rhs; }
public void addArticle(Article a) { articles.add(a); }
public String toString() { StringBuffer buf = new StringBuffer("Magazine: Name='" + name + "' "); for (int i = 0; i < articles.size(); i++) { buf.append(articles.get(i).toString()); } return buf.toString(); } }
|
rules.xml: | Код | <?xml version="1.0"?>
<digester-rules> <object-create-rule pattern="catalog" classname="Catalog" /> <set-properties-rule pattern="catalog"> <alias attr-name="library" prop-name="library" /> </set-properties-rule>
<pattern value="catalog/book"> <object-create-rule classname="Book" /> <call-method-rule pattern="author" methodname="setAuthor" paramcount="0" /> <call-method-rule pattern="title" methodname="setTitle" paramcount="0" /> <set-next-rule methodname="addBook" /> </pattern>
<pattern value="catalog/magazine"> <object-create-rule classname="Magazine" />
<call-method-rule pattern="name" methodname="setName" paramcount="0" />
<pattern value="article"> <object-create-rule classname="Article" /> <set-properties-rule> <alias attr-name="page" prop-name="page" /> </set-properties-rule> <call-method-rule pattern="headline" methodname="setHeadline" paramcount="0" /> <set-next-rule methodname="addArticle" /> </pattern>
<set-next-rule methodname="addMagazine" /> </pattern> </digester-rules>
|
catalog.xml: | Код | <?xml version="1.0"?>
<catalog library="somewhere">
<book> <author>Author 1</author> <title>Title 1</title> </book>
<book> <author>Author 2</author> <title>His One Book</title> </book>
<magazine> <name>Mag Title 1</name>
<article page="5"> <headline>Some Headline</headline> </article>
<article page="9"> <headline>Another Headline</headline> </article> </magazine>
<book> <author>Author 2</author> <title>His Other Book</title> </book>
<magazine> <name>Mag Title 2</name>
<article page="17"> <headline>Second Headline</headline> </article> </magazine>
</catalog>
|
Как сделать в обратную сторону ? Может кто-то может показать как, скажем, изменить XmlRulesDriver.java класс, чтобы после строчки: | Код | Catalog catalog = (Catalog) digester.parse(input);
|
шёл бы не вывод в консоль, а создание и сохранение в файл catalog2.xml ? Это сообщение отредактировал(а) Kizja - 11.5.2010, 21:15
|