|
|
|
нужна помощь...
|
|||
|---|---|---|---|
|
#18+
Люди помогите пожалуйста. Необходимо написать преобразование(при помощи xsl) которое из такого xml файла: <programlisting> <codeline lineno="23"> <highlight class="preprocessor"></highlight> <highlight class="preprocessor">#define<sp/>текст1<sp/>текст2</highlight> </codeline> <codeline lineno="24"> <highlight class="preprocessor"></highlight> <highlight class="normal"></highlight> </codeline> <codeline lineno="25"> <highlight class="normal"></highlight> <highlight class="preprocessor">#ifndef<sp/>LOG_PERROR<sp/>255</highlight> </codeline> <codeline lineno="26" refid="compat_8h_1542160b84335cc94dfb75604fd40d341" refkind="member"> <highlight class="preprocessor"></highlight> <highlight class="preprocessor">#define<sp/>LOG_PERROR<sp/>0</highlight> </codeline> <codeline lineno="29"> <highlight class="normal"></highlight> <highlight class="preprocessor">#ifhhndef<sp/>SA_NOCLDWAIT</highlight> </codeline> <codeline lineno="30" refid="compat_8h_1e4c1aad864ef72e4a2cce74b1b8a5a0b" refkind="member"> <highlight class="preprocessor"></highlight> <highlight class="preprocessor">#define<sp/>SA_NOCLDWAIT<sp/>0</highlight> </codeline> </programlisting> Делало бы следующую табличку, в которой для каждого <highlight class="preprocessor"> начинающегося(или содержащего) с #define было: 23(взято из codeline lineno="23">) текст1 текст2 26 LOG_PERROR 0 30 SA_NOCLDWAIT 0 и.т.д. Я мучаюсь уже неделю(ибо чайник в XSLT) и ничаво не получается….. Заранее спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2007, 20:12 |
|
||
|
нужна помощь...
|
|||
|---|---|---|---|
|
#18+
Вот пример покороче: <programlisting> <codeline lineno="23"> <highlight class="preprocessor"></highlight> <highlight class="preprocessor">#define<sp/>текст1<sp/>текст2</highlight> </codeline> <codeline lineno="24"> <highlight class="preprocessor">bbbb</highlight> <highlight class="normal">ccccc</highlight> </codeline> <codeline lineno="25"> <highlight class="normal"></highlight> <highlight class="preprocessor">#define<sp/>текст3<sp/> текст4</highlight> </codeline> </programlisting> Нужно получить: 23(взято из codeline lineno="23">) текст1 текст2 25 текст3 текст4 Попробовал написать вот так: <xsl:template match="/"> <xsl:variable name="varStartWith">#def</xsl:variable> <xsl:for-each select="programlisting/codeline/highlight[@class='preprocessor']"> <xsl:variable name="varhighlight"> <xsl:value-of select="."/> </xsl:variable> <xsl:if test="contains($varhighlight,$varStartWith)"> <xsl:text>string</xsl:text> <xsl:value-of select="..//@lineno"/> <xsl:value-of select="."/> </xsl:if> </xsl:for-each> </xsl:template> Выдает следующее: String23 #defineтекст1текст2 String25 #define текст3текст4 Как бы разделить текст1 и текст2(каким-нибудь знаком или в отдельный столбец) и убрать #define???(очевидно основываясь на обработке </sp> в роли разделителя) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 10:06 |
|
||
|
нужна помощь...
|
|||
|---|---|---|---|
|
#18+
Nick_olaЛюди помогите пожалуйста... ... Я мучаюсь уже неделю(ибо чайник в XSLT) и ничаво не получается….. Если ты "чайник в XSLT", то - на первый раз прощается... А на будущее запомни - XSLT не "императивный" язык (где надо писать циклы, заводить переменные и вызывать "подпрограммы" с параметрами), а - "декларативный", т.е. тебе нужно четко "в голове" представлять что ты именно хочешь получить (а не - как ), а потом - только записать свои пожелания в терминах шаблонов + предикатов XPath. Типа так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2007, 11:51 |
|
||
|
нужна помощь...
|
|||
|---|---|---|---|
|
#18+
Спасибо огромное за ответ! Но применительно к вот этому: <programlisting> <codeline lineno="33"> <highlight class="normal"/> <highlight class="preprocessor">#include<sp/>"<ref refid="lib_8h" kindref="compound">lib.h</ref>"</highlight> <highlight class="normal"/> </codeline> <codeline lineno="39"> <highlight class="normal"/> <highlight class="preprocessor">#ifdef<sp/>HAVE_SHAPER<sp/> </highlight> </codeline> <codeline lineno="78"> <highlight class="normal"/> <highlight class="preprocessor">#ifndef<sp/>timersub</highlight> </codeline> </programlisting> Твоя версия(xsl) выдает следующее: "lib.h " HAVE_SHAPER timersub Интересно что нужно поправить чтобы не было реакции на это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 08:54 |
|
||
|
нужна помощь...
|
|||
|---|---|---|---|
|
#18+
Nick_ola... Интересно что нужно поправить чтобы не было реакции на это? Ну, добавить можно вот это: Код: plaintext 1. 2. 3. 4. 5. 6. Однако же, "глыбже" по ходу обработки дерева элементов - нет никаких указаний xslt-процессору (шаблонов) как именно обрабатывать эти элементы. В моем примере есть только 2 более "специализированных" шаблона: 2. для элементов, у которых первый текстовый узел = "#define"; 3. для дочерних текстовых узлов обрабатываемых элементов. "Правильный" парсер (xslt-процессор) в этом случае (если нет шаблона для обработки, зато есть указание от "<xsl:apply-templates ..." обрабатывать эти элементы) применяет т.н. "преобразование по-умолчанию", которое заключается в том, что в выходной поток "тупо" пишется содержимое всех текстовых узлов всех дочерних (и "внучатых") элементов от обрабатываемого (именно поэтому в вывод "нового" примера "пролезла" lib.h). Вобщем, правило простое - чем более четко специфицируются в шаблонах правила перебора элементов, тем меньше вариантов "левого" вывода в выходной поток. В вашем "упрощенном" примере - единственный элемент без "#define" имел и единственный текстовый узел "bbbb", который при обработке шаблона игнорировался по условию "not(position()=1)", что создало у меня ложное представление о "правильности" поверхностного решения... З.Ы. "на всякого мудреца - довольно простоты" © не мой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 11:17 |
|
||
|
нужна помощь...
|
|||
|---|---|---|---|
|
#18+
qu-qu еще раз спасибо!:-) Теперь вот такой вопрос: Имеется xsl, директория с xml файлами, нужно их всех обработать и на выходе получить один txt (дабы потом преобразовать xls), как сие лучше проделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 16:49 |
|
||
|
нужна помощь...
|
|||
|---|---|---|---|
|
#18+
Nick_ola... Имеется xsl, директория с xml файлами, нужно их всех обработать и на выходе получить один txt (дабы потом преобразовать xls), как сие лучше проделать? Да как угодно... написать скрипт на VBS/JS, который переберет все файлы xml в каталоге, преобразует их с помощью xsl-шаблона и "сольет" в одну большую текстовую строку, которую потом же в файл и сохранит; скачать с сайта мелкомягких утилиту msxsl.exe и написать BAT/CMD файлик, который сделает почти то же самое, но средствами командной строки; написать свою собственную утилиту на C#/VB.NET с той же функциональностью (там парсер немного более "продвинутый", чем "стандартный" msxml.dll); да мало ли еще как... Если у вас xml файлы не 100-"метровых" размеров, то все предложенные способы не будут особо критичны по ресурсам и времени исполнения. Если же файлы действительно большие, а производительность решения важна - тогда придется вам разбираться с методами SAX-обработки xml и выстраивать свои собственные преобразования на потоковом переборе элементов... (но, к xslt это уже не имеет никакого отношения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 19:06 |
|
||
|
|

start [/forum/topic.php?fid=14&msg=34636880&tid=1334243]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 372ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...