Дикий пионер

Рейтинг
203
Регистрация
23.11.2009

В firefox есть расширение firebug, там есть вкладка "сеть" - можно посмотреть к каким сайтам при открытии страницы идут обращения.

Ищите в файлах темы eval, ссылки скорее всего закодированы.

100% гарантию, что будет работать я не дам, но писалось с расчетом на это.

Здесь есть "функция" copier - <xsl:template name="copier">, она выводит сам элемент и его параметры, а для дочерних тегов вызывает саму себя. Единственный костыль - это отображение атрибута xmlns у тега, так как средствами xlst он за атрибут не считается, поэтому он устаналивается только для тега button. Если этот атрибут не будет мешать у других тегов, то его можно всем прописывать, либо же дополнять условие, чтобы xmlns прописывался и у других тегов.

Вложенность тут ограничена скорее каким-то техническими факторами, а ля памяти может не хватить или еще что. Параметры у тегов тоже копирует.

На вашем примере вот такой получился:


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="copier">
<!-- копирует переданный элемент -->
<xsl:param name="elem" />
<xsl:element name="{name()}">
<!-- копирует параметры -->
<xsl:for-each select="./@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:for-each>
<!-- параметр xmlns через предыдущее выражение не получается, поэтому его только для тега button прописываем руками -->
<xsl:if test="name()='button'">
<xsl:attribute name="xmlns">
<xsl:value-of select="namespace-uri()" />
</xsl:attribute>
</xsl:if>
<!-- дочерние элементы обрабатываем аналогично -->
<xsl:for-each select="*">
<xsl:call-template name="copier">
<xsl:with-param name="elem" select="." />
</xsl:call-template>
<!-- Текст внутри элементов выводим только для узлов, у которых нет потомков -->
<xsl:if test="string-length(text())!=0 and count(*)=0">
<xsl:value-of select="." />
</xsl:if>
</xsl:for-each>
</xsl:element>

</xsl:template>

<xsl:template match="data">
<result>
<xsl:for-each select="buttons">
<xsl:call-template name="copier">
<xsl:with-param name="elem" select="." />
</xsl:call-template>
</xsl:for-each>
</result>
</xsl:template>
</xsl:stylesheet>

Тут рекурсивно обходим все эелменты внутри заданного, копируем атрибуты, для тега button копируем xmlns (так как он за атрибут похоже не считается), для элементов, у которых нет потомков и есть текст - выводим его.

Правда я это на php тестировал, не знаю уж получится ли с яндекс.баром.

еще вариант - это свой вариант функции copy-of написать через:


<xsl:apply-templates select="@*"/> - выборка всех атрибутов.
<xsl:value-of select="name()"/> - название текущего аттрибута/тега.
<xsl:value-of select="."/> - значение текущего атрибута/тега.

Т.е перебрать все атрибуты тега и все вложенные теги и т.п.

Но как-то это не по феншую будет, как мне кажется.

Я с преобразованиями xml/xslt только в php работал - там ваш xslt работает успешно.


<?xml version="1.0"?>
<result><buttons>
<button xmlns="http://bar.yandex.ru/dev/gui">
<text>
чваваыаывав
</text>
</button>
</buttons></result>

Вот что выдает.

пока я отвечал, вы запостили ваши xml/xslt, сейчас попробую разобраться.

if(isset($_POST['var']))

{

}

Всего: 1870