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

  • Автор темы Автор темы S.Andrew
  • Дата начала Дата начала

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>
 
обязательно 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>
хотя может и не работает :)...проверь..
 
ну примерно так

<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:

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