XSLT

Товарищи, знающие xslt и, желательно, php, дайте о себе знать.

Буду очень признателен.

Суть вопроса:

Есть xml структура:

XML:
  1. <div id="d1.">
  2. <div id="d1.1.">
  3. <div id="d1.1.1.">...</div>
  4. ...</div>
  5. <div id="d1.10.">
  6. <div id="d1.10.10.">..</div>
  7. ...</div>
  8. </div>

и xslt шаблон

XML:
  1. <li></li>

Проблема в том что в итоге выводятся элементы которые выше 2го уронвня вложенности (/div/div), т.е. результатом данного примера должно было быть

HTML:
  1. <li>О компании</li>
  2.     <li>Решения</li>

А в итоге получается (похоже на //div)

HTML:
  1. <li>О компании</li>
  2.     <li>Миссия</li>
  3.     <li>Решения</li>
  4.     <li>Телеком</li>

Причем происходит это не всегда в одном из 100-200 случаев. ВСего на сайте порядка 250 страниц и хоть одна из них после генерации html'a из xml будет с этим багов. Генерируется это все посредством php5 по 1й странице за запрос скрипта (xml порядка 1,5мб)

У меня уже даже предположения закончились.


Проблема оказалась совершенно в другом месте. Перед тем как производить манипуляции с xml файлом, он конвертировался iconv'ом из cp1251 в uf-8, и где-то это давало непонятный сбой. После исключения лишних операций с конвертацией все заработало нормально. Забавно.

4 Comments

  1. Волька says:

    Я сейчас как раз делаю XSLT фреймворк на PHP, и сайты на нем.

  2. Волька says:

    Судя по коду (2 xsl:for-each) должен выводиться только третий уровень вложенности /div/div -> div, или представлен не весь входной документ.
    Ошибка скорее всего вообще в другом месте. Используется PHP5?

  3. PHP5
    Раньше оно было на PHP4 и работало нормально. вот после того как переписал для 5й ветки и появилась эта фигня.


    $doc = new DOMDocument("1.0", SITE_CP);
    $xsl = new XSLTProcessor();
    $doc->load($xsl_file);
    $xsl->importStyleSheet($doc);
    $doc->loadXML(file_get_contents($xml_file));
    $xsl->transformToXML($doc);

  4. Степаныч says:

    Спасибочки автору. Возможно, в будущем я и правда реализую подобную затею. :)

Leave a Reply

You must be logged in to post a comment.