Опитвам се да добавя атрибут web към всички дъщерни елементи на елемента web с помощта на apply-template.
източник xml
<p></p>
<tabel>
<tr>
<td>
<web>
<p></p>
<p></p>
</web>
</td>
</tr>
<tr>
<td>
<web>
<p></p>
<ul>
<li></li>
<li></li>
</ul>
</web>
</td>
</tr>
</tabel>
целеви xml
<p></p>
<tabel>
<tr>
<td>
<p class="web"></p>
<p class="web"></p>
</td>
</tr>
<tr>
<td>
<p class="web"></p>
<ul class="web">
<li></li>
<li></li>
</ul>
</td>
</tr>
</tabel>
моя xsl
<xsl:template match="p">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="web">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="ul">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
Има ли възможност за прилагане на шаблони и добавяне на атрибут web към всички дъщерни елементи на мрежата? Някой има ли идея, как да стане това?
Отговори:
0 за отговор № 1Като се има предвид a добре оформени вход като:
XML
<html>
<p></p>
<tabel>
<tr>
<td>
<web>
<p></p>
<p></p>
</web>
</td>
</tr>
<tr>
<td>
<web>
<p></p>
<ul>
<li></li>
<li></li>
</ul>
</web>
</td>
</tr>
</tabel>
</html>
следващата стилова таблица:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="web">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="web/*">
<xsl:copy>
<xsl:attribute name="class">web</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Ще се върне:
<html>
<p></p>
<tabel>
<tr>
<td>
<p class="web"></p>
<p class="web"></p>
</td>
</tr>
<tr>
<td>
<p class="web"></p>
<ul class="web">
<li></li>
<li></li>
</ul>
</td>
</tr>
</tabel>
</html>
Забележи, че tabel
не е валиден HTML елемент.