generowanie xml'a na podstawie regul pol

0

Czesc,
mam do Was takie pytanie - czy jest mozliwosc (jesli tak to za pomoca czego) wygenerowania xml'a ktory bedzie mial wypelnione od razu pola? Tzn. generuje sobie xml'a na podstawie klas (uzywam jaxb). Znal regule kazdego pola, tzn ze pole A powinno zawierac Stringa, pole B dwie cyfry itc. Zastanawiam sie teraz, czy moge jakos w miare automatycznie i sprytnie napisac sobie regulki dla tych pol, a potem magiczna metoda typu "generujXmlaZWartosciami" wygnerowac sobie pelnego xml'a?
Mam nadz ze w miare jasno napisalam o co mi chodzi.

    pzdr,
  misty
0

Czyli wyjściowo masz XSD, z którego generujesz klasy, a potem te klasy szeregujesz do XML. Pojęcia "samo" i "automatycznie" raczej nie będą miały zastosowania. Dłubiąc coś ręcznie można podejść do tego tak:

  1. Przed szeregowaniem klas wypełniasz sobie pola w obiektach opierając się o typy (wywołania metod przez refleksję). Pozostałe ograniczenia wpisujesz sobie w swój kod, który będzie miał wpisać liczbę 2-cyfrową, jeżeli napotka pole typu Integer w klasie KlasaA albo pole o nazwie Liczba w dowolnej klasie.
  2. Inne podejście: generujesz sobie XML szeregując klasy, parsujesz go do drzewa DOM, przeprowadzasz walidację schematem i wtedy każdy węzeł ma dowiązane TypeInfo. Na podstawie odczytanych typów danych wypełniasz zawartości tagów tak, aby były zgodne. Można też odczytać kompletny zestaw ograniczeń na węzeł (długość, typy wyliczeniowe, zakres wartości regexp) i na tej podstawie coś wpisywać.
  3. Wiesz co chcesz wpisać w określone miejsca, wiążesz te dane z wyrażeniami XPath, odnajdujesz węzły w wygenerowanym pustym XML i wpisujesz powiązane wartości wartości.
0

Nie mam xsd. Sama napisalam sobie klasy (niewiele tego jest) i z nich generuje xml'a - jest ok, taki jaki mial byc.
I ogolnie nie kumam Twoich rad. Chodzilo mi o to, czy moge automatycznie je wypelnic na podstawie regul - ktore, raz - gdzie i jak umiescic? dwa - jak automatycznie wypelnic wartosci? Jedyne co mi przychodzi do glowy to napisanie sobie recznie metod ktore beda mi generowac randomowe wartosci, cos w stylu:

generateRandomValueForAField(), generateRandomValueForBField() - i w tych metodach umieszcze sobie odpowiednia logike dla kazdego z pol. Ale mysle sobie, ze moze da sie to zrobic lepiej, poprawniej, bardziej automatycznie?

pzdr,
misty

0

Może dość ogólnie to napisałem, bo miałem ogólne pojęcie o tym co masz i co chcesz zrobić. W tym konkretnym przypadku, jak masz mało klas i są pisane ręcznie, a nie generowane, to wg. mnie najprostsze jest dopisanie do każdej klasy metody np. generateRandom(), która wypełni pola losowymi wartościami oraz rekurencyjnie wywoła tą metodę w klasach węzłów dzieci. Wtedy tworzysz sobie obiekt RootElement, wywołujesz na nim tą metodę, ona wypełnia pola typów prostych, tworzy węzły podrzędne i na nich wywołuje rzeczoną metodę, w efekcie masz kompletny dokument po uszeregowaniu do XML. Rozwiązanie będzie dobre dla małego XML.

0

ok, dzieki!

A powiedz mi - w przypadku duzych xmli na prawde latwiejsze jest pisanie xsd niz pisanie klas? Bo mi sie wydaje to troche na okretke. A na koncu i tak musze te klasy wygenerowac. Ale pewnie zle mi sie wydaje skoro ludzie tego uzywaja. A moze uzywa sie tego bo pliki xsd sa tworzone przez ludzi nie do konca znajacych sie na programowaniu?

pzdr,
misty

0

@misty ale jak chcesz żeby ktoś mógł napisać dobry plik xml zgodny z twoją specyfikacją to bez XSD będzie ciężko.

0

Tylko ze nikt nie ma pisac tego pliku xml, moj program bedzie go generowal. I wlasnie zastanawiam sie po co wpierw mam pisac xsd i potem na podstawie tego generowac klasy - czy moze nie lepiej napisac od razu klasy?

0

Jeśli to nie tajemnica to w takim razie po co w ogóle ci ten XML? Bo przecież zaletą XMLa jest właśnie to że jest human-readable. Skoro i tak nikt go nie pisze tylko się generuje to po co rozwlekły XML zamiast danych zapisanych binarnie?

0

xml jest formatem przechwowywania jakis danych. Przygotowuje je by wyslac je dalej, do aplikacji ktora sobie cos z tym zrobi. Ale nadal nie rozumiem (podkreslam ze nie rozumiem, nie twierdze zas ze nie ma sensu) uzycia w moim przypadku xsd. Jesli jest to lepsze to chcialabym wiedziec co z tego dostane? Bo jesli nie znam formatu xsd to moze zejdzie mi wiele wiecej czasu niz napisanie sobie tych klas ktore docelowo i tak dostalabym z xsd?

0

A powiedz mi - w przypadku duzych xmli na prawde latwiejsze jest pisanie xsd niz pisanie klas?

Do pisania XSD są narzędzia wizualne, w Ecplpse i Netbeans bezpłatne i cała masa komercyjnych. Każdy może pisać co mu wygodniej, ale JAXB jest przeznaczony do obsługi WebServices przede wszystkim. Tam oprogramowanie pobiera sobie WSDL, który ma wewnątrz fragmenty XSD i z tego generuje klasy. Ten XSD nie jest pisany ręcznie tylko również generowany na podstawie istniejących klas, ale zwykłych POJO. Dzięki temu można przesyłać przez internet (protokół http) obiekty zapisane w XML i opisy tych obiektów zapisane w XSD. Główna zaleta JAXB w tym przypadku jest taka, że nie trzeba wcale wiedzieć, że jest on tam używany.

0

dziewczyno, przecież sam jaxb potrafi wypluc XMLa wypełnionego danymi !

1 użytkowników online, w tym zalogowanych: 0, gości: 1