Вставляйте атрибуты на лету в тег a

Мне нужно на лету изменить «содержимое» всех тегов «a», присутствующих в определенном div (#navigation).

Существует ли правило диазо или шаблон xslt?

спасибо Вито


person Vito    schedule 28.08.2012    source источник


Ответы (2)


Ниже показано добавление атрибута (в данном случае target) к каждому из тегов a, которые являются дочерними элементами элемента с идентификатором navigation (что соответствует #navigation в CSS). Весь контент и другие атрибуты из исходных тегов сохраняются (хотя порядок может быть и другим — хотя это не должно быть проблемой).

<?xml version="1.0" encoding="UTF-8"?>
<rules xmlns="http://namespaces.plone.org/diazo"
       xmlns:css="http://namespaces.plone.org/diazo/css"
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <after css:theme="#target" css:content="#navigation" />

    <xsl:template match="*[@id='navigation']//a">
        <xsl:copy>
            <xsl:attribute name="target">_blank</xsl:attribute>
            <xsl:copy-of select="@*" />
            <xsl:apply-templates />
        </xsl:copy>
    </xsl:template>
</rules>

Измените условие match соответствующим образом с дополнительными условиями, если вы хотите сопоставить определенные теги a. xsl:template будет выполняться после всех стандартных правил Diazo, поэтому убедитесь, что вы соответствующим образом настроили условие match, если вам случится изменить структуру расположения тегов a в результирующем документе.

Это расширенный пример в официальной документации Diazo по адресу http://docs.diazo.org/en/latest/recipes/adding-an-attribute/index.html

person davidjb    schedule 04.02.2013

Не уверен, что вы имеете в виду. Если вы хотите создать XSLT, который копирует все, но настраивает только элементы «a» внутри div id='navigation', вы должны сделать что-то вроде этого:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />

<xsl:template match="@*|node()" priority="-1">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

<xsl:template match="//div[@id='navigation']//a">
   <a>
       <xsl:attribute name='href'>
           <xsl:value-of select='@href' />
       </xsl:attribute>
       <!-- Change your content here -->
   </a>
</xsl:template>

</xsl:stylesheet>
person BxlSofty    schedule 28.08.2012