Модификация XML дерева с помощью XSLT

S.Andrew

Guest
Модификация XML дерева с помощью XSLT

В принципе проблема должна решаться просто ... но что никак не могу найти примера (google курил хотя может и не с того конца).

Есть XML дерево
<elements>
&nbsp;&nbsp;<header>Header</header>
&nbsp;&nbsp;<body />
<elements>

При помощи XSLT нужно не переконвертить в HTML скажем ... а пробежать по дереву и в нужные мне nodes вставить attributes (структуру дерева сразу говорю не знаю ... выше возможный пример) ... и выдать то что получилось ... например

<elements>
&nbsp;&nbsp;<header>Header</header>
&nbsp;&nbsp;<body bgcolor="#FFFFFF"/>
<elements>
 

chameleon

Новичок
обязательно XSLT для этого использовать? имхо, лучше SAX-модель пользуй.
Если, все же XSLT и ничего другого, то, например, так:
PHP:
<xsl:template match="body">
 <xsl:copy>
  <xsl:apply-templates select="@*"/>
  <xsl:attribute name="bgcolor">#FFFFFF</xsl:attribute>
  <xsl:apply-templates select="node()"/>
 </xsl:copy>
</xsl:template>
<!-- Identity Transformation -->
<xsl:template match="*|@*">
 <xsl:copy>
  <xsl:apply-templates select="@*|node()"/>
 </xsl:copy>
</xsl:template>
хотя может и не работает :)...проверь..
 

slach

Новичок
ну примерно так

<xsl:template math="elements|header|и т.д. теги которые надо просто скопировать">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>

<xsl:template match="body">
<xsl:copy>
<xsl:attribute name="bgcolorr">#ffffff</xsl:attribute>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>

-~{}~ 25.10.04 16:00:

у хамелеона более верное решение
 

S.Andrew

Guest
Спасибо за ответ ... судя по коду придется не пробежаться по дереву и по сути перерисовать его заново ... тут чувствуется использование XSLT не по назначению ... поэтому над вопросом "обязательно XSLT для этого использовать?" нужно будет серьезно подумать.
 

chameleon

Новичок
судя по коду придется не пробежаться по дереву и по сути перерисовать его заново
а ты думаешь XSLT-процессор конечные литеральные элементы не перерисовывает? Ничего зазорного не вижу, да и зависит это от объема исходного дерева и требуемой частоты такого рода операции. По мне, если все аттрибуты, которые ты привел, дейстительно только форматирующие, так это вообще голимый CSS :)..
 
Сверху