Podczas tworzenia oprogramowania na każdym kroku mamy kontakt z danymi w formacie XML. Opiszę tutaj jeden ze sposobów konwersji danych w obie strony Java <-> XML.
Ale na początek przyjrzyjmy się źródłom słynnego już kalkulatora wyborczego. Twórcy oprogramowania wykazali się dość ciekawym podejściem w generowaniu dokumentów XML, a dokładnie wykorzystali zwykłą konkatenację „stringów”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
... string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"; xml += "<save>"; string hour = ""; ... string text = xml; xml = string.Concat(new string[] { text, "<attendance><attendanceHour>", hour, "</attendanceHour><attendanceValue>", value, "</attendanceValue><currentLwyb>", this.currentLwyb.Text, "</currentLwyb></attendance>" }); xml += "<header>"; xml += this.getHeader(this.header); xml += "</header>"; xml += "</save>"; ... |
Nietrudno można sobie wyobrazić co byłoby w przypadku bardziej skomplikowanej struktury zawierającej wiele węzłów podrzędnych i atrybutów. Programista prawdopodobnie niejednokrotnie pomylił się podczas zamykania znaczników (choćby przez „literówki”). Taki kod jest bardzo ciężki w utrzymaniu. Poza tym dokument będzie niemożliwy do odczytu, jeśli np. zmienna this.currentLwyb.Text zawierałaby jeden ze znaków predefiniowanych w XML encji: &, <, >, „, ‚.
Jest to przykład nierzadko spotykanych złych praktyk, a poniżej przestawię bardziej eleganckie rozwiązanie w Javie.