Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> apache digister: java -> xml 
:(
    Опции темы
Kizja
Дата 11.5.2010, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 15.7.2007

Репутация: нет
Всего: нет



Привет, подскажите пожалуйста можно ли с помощью 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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0398 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.