Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

PTWPZ093 - PTwPZ KWIX

Problem F: KWIX

Treść

Zgodnie z definicją w Wikipedii

XML (ang. Extensible Markup Language, w wolnym tłumaczeniu Rozszerzalny Język Znaczników) to uniwersalny język formalny przeznaczony do reprezentowania różnych danych w ustrukturalizowany sposób. XML jest niezależny od platformy, co umożliwia łatwą wymianę dokumentów pomiędzy różnymi systemami i znacząco przyczyniło się do popularności tego języka w dobie Internetu. XML jest podzbiorem języka SGML, tj. każdy dokument XML jest też dokumentem SGML. XML jest rekomendowany oraz specyfikowany przez organizację W3C.

XML jest jednym z najczęściej stosowanych formatów wymiany danych pomiędzy programami. Co prawda jego tekstowa postać daje też człowiekowi możliwość przeczytania takiego dokumentu, jednak jest to utrudnione przez brak odpowiedniego formatowania. Grupa studentów z Koła Naukowego Studentów Wydziału Informatyki Politechniki Białostockiej postanowiła coś na to poradzić i opracowała własny format o nazwie KWIX. Zasady przekształcania dokumentów z XML na KWIX są następujące:

  1. Nazwa każdego elementu jest wypisana w osobnej linii. Przed nazwą, w zależności od poziomu zagłębienia, wypisywane są znaki spacji (po 4 spacje na każdy poziom). Po nazwie występuje znak dwukropka.
  2. Jeżeli element posiada atrybuty, to każdy z nich jest wypisywany w osobnej linii pod nazwą elementu w kolejności zgodnej z kolejnością wystąpienia w dokumencie XML. Każdy atrybut wypisywany jest według następującej formuły. Na początku wypisywane są znaki spacji: tyle ile dla nazwy elementu plus 4 dodatkowe. Po tym następują kolejno: nazwa atrybutu, spacja, znak równości, spacja i wartość atrybutu.
  3. Po atrybutach wypisywane są elementy potomne, w kolejności wystąpienia w dokumencie XML i zgodnie z regułami 1 i 2.
  4. Ostatnia linia dokumentu KWIX jest zakończona znakiem nowej linii.
  5. Prezentacja tekstu między elementami, komentarzy, przestrzeni nazw i innych nie wymienionych powyżej składników języka XML jest przedmiotem dalszych prac i będzie ujęta w kolejnych wersjach formatu KWIX.

Tobie jako świeżo upieczonemu członkowi Koła przypadł w udziale obowiązek i przyjemność zaimplementowania tego, co wymyślili Twoi starsi koledzy i koleżanki. Napisz program, który zamieni dokument XML na KWIX zgodnie ze specyfikacją.

Wejście

Dane podawane są na standardowe wejście. Stanowią one poprawny dokument XML. W dokumencie tym nazwy elementów oraz nazwy i wartości atrybutów składają się wyłącznie z małych i wielkich liter alfabetu łacińskiego oraz cyfr. Nie występują tu początkowe linie z deklaracjami XML. Brak jest też komentarzy i tekstu. Między elementami występują jedynie znaki spacji i nowej linii. Każdy element otwierający (nazwa i atrybuty) zaczyna się i kończy w tej samej linii. Wartości atrybutów podawane są w cudzysłowach. Cały dokument zawiera nie więcej niż 10 000 znaków.

Wyjście

Wynik programu powinien być wypisywany na standardowe wyjście. Jest nim dokument XML z wejścia przekształcony do formatu KWIX.

Przykład

dane wejściowe:
<zbiory>
<zbior nazwa="pierwszy" licznosc="2">
<roslina nazwa="trawa" >
<lisc kolor="zielony"/> <lodyga/>
</roslina>
<roslina nazwa="tulipan" typ="kwiat">
<lisc kolor="zielony" dlugosc="10"/><kwiat>
<platek kolor="czerwony"><robak /></platek>
</kwiat>
</roslina></zbior>
<zbior licznosc="0"></zbior></zbiory>

 

wynik:

zbiory:
zbior:
nazwa = pierwszy
licznosc = 2
roslina:
nazwa = trawa
lisc:
kolor = zielony
lodyga:
roslina:
nazwa = tulipan
typ = kwiat
lisc:
kolor = zielony
dlugosc = 10
kwiat:
platek:
kolor = czerwony
robak:
zbior:
licznosc = 0

Dodane przez:Michael Suchacz
Data dodania:2009-07-24
Limit czasu wykonania programu:0.200s
Limit długości kodu źródłowego50000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:All except: GOSU
Pochodzenie:Podlaski Turniej w Programowaniu Zespołowym
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.