Я хочу, чтобы строка: ahre f = "{@ referencddePage}" получила вход от корня: ahref = "{@referencddePage}" ... но я уже в <td level>
Если правило, что атрибут @referencePage
всегда является атрибутом верхнего элемента, то к нему всегда можно получить доступ как:
/*/@referencePage
Следовательно, в вашемкод, который вы будете иметь:
<a href="{/*/@referencePage}">
Я бы рекомендовал не использовать <xsl:for-each>
и использовать только and
`.Таким образом, полученный XSLT-код становится более понятным и может быть легче изменен в будущем:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="row">
<tr>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="td">
<td border="0">
<a href="{/*/@referencePage}">
<xsl:apply-templates/>
</a>
</td>
</xsl:template>
<xsl:template match="pic">
<img src="{@src}" width="{@width}" height="{@height}"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к предоставленному XML-документу,
<data pageNo="3" referencePage="xxxxxxxxxxxxxxx.xml">
<pics>
<row no="0">
<td col="0">
<pic src="A.jpg" width="150" height="120"></pic>
</td>
</row>
</pics>
</data>
желаемый результат получается:
<tr>
<td border="0">
<a href="xxxxxxxxxxxxxxx.xml">
<img src="A.jpg" width="150" height="120"/>
</a>
</td>
</tr>
Посмотрите, как каждый шаблон настолько прост.Кроме того, код еще более упрощен.
Теперь вместо:
<img src="{pic/@src}" width="{pic/@width}" height="{pic/@height}"/>
у нас есть только:
<img src="{@src}" width="{@width}" height="{@height}"/>