У меня есть кусок XML
данных, которые мне нужно преобразовать в WML
.
Это примерно так:
<root>
<category name="music"/>
<subcategory name="classic"/>
<subcategory name="rock"/>
<subcategory name="Techno"/>
<node type="music" subtype="classic" name="beethoven"/>
<node type="music" subtype="classic" name="chopin"/>
<record author="beethoven" name="moonlight sonata"/>
…
</root>
Я не могу изменить структуру файла.
Некоторые Nokia
мобильные браузеры не могут загружать много <card>
в память.
Таким образом, в зависимости от мобильного браузера страница WML
должна представлять собой либо целый набор <card>
, либо некоторое подмножество <card>
.
Например, если я загружаю страницу с помощью обычного браузера, она должна выглядеть следующим образом:
<wml>
<card id="TOC">
<p><a href="#contents">Contents</a></p>
<p><a href="#az">A-Z</a></p>
</card>
<card id="contents">
<p><a href="#music">music</a></p>
<p><a href="#video">video</a></p>
<p><a href="#java">java</a></p>
</card>
<card id="az">
<p><a href="#beethoven">beethoven</a></p>
<p><a href="#chopin">chopin</a></p>
</card>
<card id="music">
<p><a href="#classic">classic</a></p>
<p><a href="#rock">rock</a></p>
<p><a href="#Techno">Techno</a></p>
</card>
<card id="classic">
<p><a href="#beethoven">beethoven</a></p>
<p><a href="#chopin">chopin</a></p>
</card>
…
</wml>
, чтобы пользователь мог просматривать без дополнительных обращений к серверу.
Однако, когда я использую Nokia
и захожу на стартовую страницу, страница должна выглядеть следующим образом:
http://example.com/
<wml>
<card id="TOC">
<p><a href="#contents">Contents</a></p>
<p><a href="#az">A-Z</a></p>
</card>
<card id="contents">
<p><a href="#music">music</a></p>
<p><a href="#video">video</a></p>
<p><a href="#java">java</a></p>
</card>
<card id="az">
<p><a href="/beethoven">beethoven</a></p>
<p><a href="/chopin">chopin</a></p>
</card>
<card id="music">
<p><a href="/classic">classic</a></p>
<p><a href="/rock">rock</a></p>
<p><a href="/Techno">Techno</a></p>
</card>
<card id="video">
<p><a href="/movies">Movies</a></p>
</card>
<card id="java">
<p><a href="/games">Games</a></p>
</card>
</wml>
, когда я посещаю href
, там должно отображаться внутреннее содержимое:
http://example.com/classic
<wml>
<card id="TOC">
<p><a href="#contents">Contents</a></p>
<p><a href="#az">A-Z</a></p>
</card>
<card id="contents">
<p><a href="/music">music</a></p>
<p><a href="/video">video</a></p>
<p><a href="/java">java</a></p>
</card>
<card id="az">
<p><a href="#beethoven">beethoven</a></p>
<p><a href="#chopin">chopin</a></p>
</card>
<card id="classic">
<p><a href="#beethoven">beethoven</a></p>
<p><a href="#chopin">chopin</a></p>
</card>
…
</wml>
Обычно XSLT
должен выполнять следующие действия:
Примите какой-то параметр того, что должно быть показано: категория, подкатегория и т. Д.
Подсчитайте <card>
, которые будут показаны.
- Если мы загружаем только типы и оглавление, мы получаем
2
карт (мы всегда их показываем)
- Если мы загружаем только типы и подтипы, мы получаем
10
карточек.
- Если мы загружаем типы, подтипы и заголовки, мы показываем
100
карточек.
- Если мы загрузим все, мы покажем
300
карточек.
Nokia
не может обрабатывать более 120
карт, поэтому мы просто останавливаемся на уровне 3
.
Если XML
изменяется и уровень 3
требует 130
карт, мы должны остановиться на уровне 2
.
Не показывать <card>
, если оно ниже определенного уровня
Замените #
(внутренние ссылки) на /
(внешние ссылки), если карта не должна отображаться.
Можно ли сделать это в одном XSL
файле?