Придумал и заодно решил тупую, но забавную задачку. Максимально развернуть входящий XML-документ. То есть из сорца вроде:
<alphabet-listing>
<letter name000="A letter">
<mark1_>Alfa Romeo</mark1_>
<mark222>Aston Martin</mark222>
<mark33333333>Audi</mark33333333>
</letter>
<!-- Тестовый коммент -->
<test:letter name="B letter" xmlns:test="http://localhost">
<mark>Bentley</mark>
<mark>BMW</mark>
<mark>Buick</mark>
</test:letter>
<letter test2:name="C letter" xmlns:test2="http://localhost2">
<mark>Cadillac</mark>
<mark>Chery</mark>
<mark>Chevrolet</mark>
<mark>Chrysler</mark>
<mark>Citroen</mark>
</letter>
<letter name="D letter">
<mark>Daewoo</mark>
<mark>Daihatsu</mark>
<mark>Dodge</mark>
</letter>
</alphabet-listing>
Получить что-нибудь такое:
<gnitsil-tebahpla>
<rettel eman="rettel D">
<kram>egdoD</kram>
<kram>ustahiaD</kram>
<kram>ooweaD</kram>
</rettel>
<rettel auto-ns1:eman="rettel C" xmlns:auto-ns1="http://localhost2">
<kram>neortiC</kram>
<kram>relsyrhC</kram>
<kram>telorvehC</kram>
<kram>yrehC</kram>
<kram>callidaC</kram>
</rettel>
<rettel eman="rettel B" xmlns="http://localhost">
<kram xmlns="">kciuB</kram>
<kram xmlns="">WMB</kram>
<kram xmlns="">yeltneB</kram>
</rettel>
<!-- Тестовый коммент -->
<rettel eman="rettel A">
<kram>iduA</kram>
<kram>nitraM notsA</kram>
<_1kram>oemoR aflA</_1kram>
</rettel>
</gnitsil-tebahpla>
Совершенно несмешная первоапрельская шутка, например. Заодно демонстрирует некоторые интересные штуки типа переворачивалки строки/порядка следования и создания NCName.
Комментарии о происходящем прямо по XSLT-коду. Читать дальше →