Здравствуйте, Odi$$ey, Вы писали:
OE>Первый раз пишу xsl надо преобразовать XML-файл в html-таблицу:
OE>как бы это безобразие переделать, чтоб <xsl:choose></xsl:choose> было только в одном экземпляре?
1. call_template вобще плохой стиль.. почему не apply_template?
2. по крайней мере match можно задавать с маской!
Здравствуйте, mikkri, Вы писали:
M>Здравствуйте, vvaizh, Вы писали:
V>>1. call_template вобще плохой стиль..
M>Почему?
Когда говорят "плохой" стиль, это значит других аргументов нет..
Так говорят "опытные пацаны" которых я знаю..
В общем может причины и есть, но я их сейчас красиво сформулировать не смогу..
Так что сугубое ИМХО, как и само понятие "стиль"..
Здравствуйте, vvaizh, Вы писали:
V>Здравствуйте, mikkri, Вы писали:
M>>Здравствуйте, vvaizh, Вы писали:
V>>>1. call_template вобще плохой стиль..
M>>Почему?
V>Когда говорят "плохой" стиль, это значит других аргументов нет.. V>Так говорят "опытные пацаны" которых я знаю.. V>В общем может причины и есть, но я их сейчас красиво сформулировать не смогу.. V>Так что сугубое ИМХО, как и само понятие "стиль"..
Спрашиваю из-за того, что я пытался пользоваться обоими способавми для написания шаблонов.
Так вот, если структуру документа ты знаешь заранее, то, как мне показалось, намного удобнее использовать call-template из-за полной уверенности в составе применяемых шаблонов и последовательности их применения.
Более того, если один и тот же тег в разных контекстах нужно по разному интерпретировать, то apply-templates затруднительно использовать.
Хотя, в случае документа с хаотичной структурой и неперегруженным семантикой составом тегов apply-templates применять конечно же легче/лучше.
А другого смысла у select вроде как тоже нет: select
Can be used to process nodes selected by an expression, instead of processing all children. The value of the select attribute is an expression, which must evaluate to a node-set. The selected node-set is processed in document order, unless a different sort order has been specified.
Еще одна проблема. У тебя второй и третий шаблоны зацикливаются (т.е. если бы во втором шаблоне apply-templates срабатывал, то ты получал бы зацикливание).
BTW, опять же где то слышал, что люди работающие с XML делятся на тех, кто доказывает, что наилучший стиль — пихать всё что можно в аттрибуты, и тех, кто считает, что наобород их как можно больше следует избегать.. Я как видите отношусь к последним..
Может быть как раз отттого, что мой XSL получился короче.. И вообще я бы например даже msg заключил в отдельный тэг, чтобы не пользоваться text(), а может быть даже и level..
Это лучшее средства из тех что я знаю (и самое лёгкое) для написания/отладки XML/XSL
в правой части окна — xml, в левой — xsl, по f5 — результат, как то можно
пошагово отлаживать (я правда не пользуюсь)
представление текст/html/дерево тэгов, умная подсветка, умный autocomplete, wizard удобный..
Возможность смотреть результаты разных XSLT-процесоров..
В общем без него как без рук..
Здравствуйте, vvaizh, Вы писали:
V>BTW, опять же где то слышал, что люди работающие с XML делятся на тех, кто доказывает, что наилучший стиль — пихать всё что можно в аттрибуты, и тех, кто считает, что наобород их как можно больше следует избегать.. Я как видите отношусь к последним.. V>Может быть как раз отттого, что мой XSL получился короче.. И вообще я бы например даже msg заключил в отдельный тэг, чтобы не пользоваться text(), а может быть даже и level.. V> V>Хотя, может кто то подскажет вам выход и для вашей структуры XML..
Можно делать все так же, только использовать в селектах выбор атрибута.
P.S. Твой скрипт мне понравился больше моего
А что касается предпочтений между атрибутами и полноценными нодами — то нужно по ситуации разбираться.
Т.е. в некоторых ситуациях атрибуты будут удобнее из-за своей компактности, в некоторых они наоборот будут недостаточны, например, в случае мульти-значений для какой-то величины
Здравствуйте, mikkri, Вы писали:
V>>Хотя, может кто то подскажет вам выход и для вашей структуры XML.. M>Можно делать все так же, только использовать в селектах выбор атрибута.
К сожалению в мой код опять вкралась ошибка
там где в when test нужно было писать:
../@level=0 or @level=0
../@level=1 or @level=1
.....
При этом строчки получаются разноцветными..
Дык вот, если поставить скажем @sender ,
то он опять таки будет одного цвета..
ИМХО это от того, что писать template для аттрибута всё таки нельзя
(ломает доку читать, поэтому если я не прав, скажите так, как сделать разноцветную хрень с аттрибутами..)
Здравствуйте, mikkri, Вы писали:
M>Здравствуйте, vvaizh, Вы писали:
V>>ИМХО это от того, что писать template для аттрибута всё таки нельзя
M>Хм. Похоже и в правду не работает
Опять ошибка! Все же можно. Только в match нужно прописывать не названия узлов, а названия атрибутов.
<CCLOG>
<REC level="0">
<time>07-03-2003 09:52:07</time>
<sender>-1</sender>
Сообщение 1
</REC>
<REC level="1">
<time>07-03-2003 09:52:07</time>
<sender>1</sender>
Сообщение 2
</REC>
<REC level="2">
<time>07-03-2003 09:52:07</time>
<sender>10</sender>
Сообщение 3
</REC>
</CCLOG>
V>BTW, опять же где то слышал, что люди работающие с XML делятся на тех, кто доказывает, что наилучший стиль — пихать всё что можно в аттрибуты, и тех, кто считает, что наобород их как можно больше следует избегать.. Я как видите отношусь к последним.. V>Может быть как раз отттого, что мой XSL получился короче.. И вообще я бы например даже msg заключил в отдельный тэг, чтобы не пользоваться text(), а может быть даже и level..
я бы с удовольствием почитал где-то теорию — чего пихать в атрибуты, чего в отдельные тэги. Пока же подхожу к этому делу так — может внутри <CCLOG>
быть несколько REC? Да. Значит делаю тэгом <REC>. Может внутри <REC> быть несколько level, sender или time? Нет. Значит это суть атрибуты одной записи <REC>.
Здравствуйте, mikkri, Вы писали:
M>Опять ошибка! Все же можно. Только в match нужно прописывать не названия узлов, а названия атрибутов.
M>Вот этот код мило все раскрашивает:
то что доктор прописал пошел разбираться как это работает
Здравствуйте, Odi$$ey, Вы писали:
OE>я бы с удовольствием почитал где-то теорию — чего пихать в атрибуты, чего в отдельные тэги. Пока же подхожу к этому делу так — может внутри <CCLOG> OE>быть несколько REC? Да. Значит делаю тэгом <REC>. Может внутри <REC> быть несколько level, sender или time? Нет. Значит это суть атрибуты одной записи <REC>.
Здравствуйте, vvaizh, Вы писали:
>>>и юзайте http://www.topxml.com/xselerator/download.asp OE>>кто это кстати, я не понял из описания
V>Это лучшее средства из тех что я знаю (и самое лёгкое) для написания/отладки XML/XSL V>в правой части окна — xml, в левой — xsl, по f5 — результат, как то можно V>пошагово отлаживать (я правда не пользуюсь) V>представление текст/html/дерево тэгов, умная подсветка, умный autocomplete, wizard удобный.. V>Возможность смотреть результаты разных XSLT-процесоров.. V>В общем без него как без рук..