Какое-то древнее дерьмо

Живёт тупо потому, что за хостинг уплачено на годы вперед

Записи в разделе 'string reverser'

XML шиворот-навыворот

13 февраля 2011 · XSLT/XPath, Рецептарий

Придумал и заодно решил тупую, но забавную задачку. Максимально развернуть входящий 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-коду. Читать дальше →