Źle rozumiesz XML i pojęcie identyfikatora. Identyfikator jest ZAWSZE unikalny wartości elementów, nazwy w strukturze mogą się dublować. Sam plik XML ma zawsze strukturę:
<element_root>
.
elementy
.
</element_root>
gdzie elementy przyjmują formę
<element atrybut="jego_wartosc">
</element>
lub
<element atrybut="jego_wartosc" />
przy czym 1 wariant jest stosowany, gdy ma zawierać głębszą strukturę, gdyż jeśli tylko pojedynczą, to można go zamienić do formy 2 (o ile te dzieci same nie mają atrybutów).
Twoja wersja więc ma sens tylko gdy dane dla dzieci są wspólne z rodzicem. Przykładem może być blokowisko. Jest jakieś jedno (element root), ale na nim są ulice (element 1 rzędu), których zapewne jest kilka. Ulica może wystąpić jako id, gdyż jest jednoznaczna (ale tylko do poziomu miasta! Jeśli jest kilka miast to już nie jest unikatowa). Następnym zagnieżdżeniem byłby numer bloku przy danej ulicy. Ale to już NIE MOŻE być id (gdyż ten sam numer może wystąpić na kilku ulicach). Można jednak przekształcić strukturę XML, by numer bloku był razem z nazwą ulicy, gdyż jest to już jednoznaczne. Jest to jednak gorsze rozwiązanie, gdyż upychamy możliwą dużą strukturę do płytko zagnieżdżonej, przez co wyszukiwanie jest za każdym razem na dużych zbiorach.
Stąd lepsze rozwiązanie to
<blokowisko>
<ulica id="Piotra">
<numer blok="1" />
<numer blok="2" />
</ulica>
<ulica id="Pawła">
<numer blok="1" />
</ulica>
<ulica id="Roberta">
<numer blok="1" />
<numer blok="2" />
<numer blok="3" />
</ulica>
</blokowisko>
zamiast tego
<blokowisko>
<ulica id="Piotra_1" />
<ulica id="Piotra_2" />
<ulica id="Pawła_1" />
<ulica id="Roberta_1" />
<ulica id="Roberta_2" />
<ulica id="Roberta_3" />
</blokowisko>
Do ulicy Piotra 1 w przypadku 1 odnieść się musielibyśmy:
/blokowisko/ulica[id=Piotra]/numer[blok=1]
a drugim:
/blokowisko/ulica[id=Piotra_1]
Niby drugi krótszy i fajniejszy, ale w przypadku rozbudowy struktury, pogłębianiu jej lub rozszerzaniu musimy mocno ingerować i zwracać uwagę co jest unikatowe, co nie i pojawia się o wiele więcej problemów z jednoznacznymi odwołaniami. Twój sposób jest zły z racji tego, że chcesz do wszystkiego id walnąć, nawet do numeru bloku zachowując prostotę struktury 1. W efekcie odwołanie do elementu z id=1 wywali błąd, bo jest takich kilka, co jest ewidentnym błędem programisty. Takie coś jest zwyczajnie zabronione w poprawnym XML.
A co gdy oprócz bloków będziesz chciał wrzucać jeszcze piętra, numery mieszkań i nazwiska lokatorów? Stworzysz wszystko pooddzielane lub poupychasz wszystko do struktury pokroju:
<blokowisko>
<ulica id="Piotra" numer="1" pietro="2", mieszkanie="5", wlasciciel="Kowalski" />
</blokowisko>
Zauważ, że można, ale wszystko Ci się do jednego ogromnego zbioru sprowadzi, w którym na dodatek zastosowanie ulicy jako id jest po prostu błędem (nie jest on unikalny... to musi stać się zwykłym atrybutem) i którego przeszukiwanie po wszystkich atrybutach może być obciążające serwer. taka struktura jest po prostu niewygodna.