Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Шаблон с хитрым параметром


Автор: StepS 27.3.2006, 12:49
Есть задача написать шаблон которому на вход подается узел, он анализируя этот узел с ним чего-то делает ?
Как задать что шаблону на вход подается узел, пробовал так:
Код

<xsl:template name="copyelement">
<xsl:param name="node"/>
    <xsl:variable name="nodename" select="name($node)"/>
    <xsl:variable name="countofcondition" select="count(document('Styles_formtwo.xml')//Style[condition/element = $nodename])"/>
    <xsl:element name="{$nodename}">
...........

compiler выдавал ошибку на последней строке и говорил что Non Qname.

Помогите разобраться плз как написать шаблон. В итоге шаблон должен копировать елемент с небольшими модификациями !

Автор: 3,14 27.3.2006, 15:19
Вот пример к-ый просто копирует XML, нужно будет что-то ьолее конкретное, обращайся.

Код

<?xml version="1.0" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:template match="*|@*">
     <xsl:copy>
      <xsl:apply-templates select="node()|@*" /> 
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Автор: StepS 27.3.2006, 18:10
надо чтоб не просто копировал, а еще каки-нить преобразования делал ! например добавлял по атрибуту в каждый елемент !?

Автор: 3,14 28.3.2006, 12:23
нет возможности проверить работает или нет, но думаю что должно:

Код

   <xsl:template match="*">
           <xsl:copy>
      <xsl:attribute name="attrName">attrVal</xsl:attribute>
                <xsl:apply-templates select="node()|@*" /> 
           </xsl:copy>
  </xsl:template>

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

Автор: StepS 29.3.2006, 09:35
Да !! smile спасибо я так и сделал - помогло. То что нунжно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)