У меня есть часть XML
данных, которые мне нужно преобразовать в WML
.Условное преобразование XSLT в PHP
Это что-то вроде этого:
<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>
Я не могу изменить структуру файла.
Some 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>
, что будет показано.- Если мы загружаем только тип и TOC, мы получаем
2
карт (мы всегда показываем их)- Если мы загружаем только тип и подтипы, мы получаем
10
карты. - Если мы загружаем типы, подтипы и заголовки, мы показываем карты
100
. - Если мы загружаем все, мы показываем карты
300
.
- Если мы загружаем только тип и подтипы, мы получаем
Nokia
не может работать с более чем120
карты, так что мы просто остановимся на уровне3
.Если
XML
изменений и уровень3
требует130
карт, мы должны остановиться на уровне2
.- Если мы загружаем только тип и TOC, мы получаем
Не показывать
<card>
, если она ниже определенного уровняЗаменить
#
(внутренние ссылки) с/
(внешние ссылки), если карта не будет показано.
Можно ли сделать в одном файле XSL
?
Будет ли только один уровень URL-адреса? Slash + ключевое слово, вот оно что? Разве это не приводит к двусмысленности? Или URL-адрес структурирован? – Tomalak
Нет, не будет. Он был разработан, чтобы держать все карты сразу, и им нужно иметь разные имена. Проблема возникла только при тестировании. – Quassnoi
Таким образом, я могу доверять, что @names будут уникальными во всех категориях/подкатегории/элементах узла/записи? – Tomalak