Как получить доступ к корневому атрибуту с более глубокого уровня в XSLT - PullRequest
4 голосов
/ 22 сентября 2010

Я вызываю шаблон:

<table>
    <xsl:apply-templates select="data/pics/row"/>
</table>

Шаблон

<xsl:template match="row">
    <tr>
        <xsl:for-each select="td">
            <td border="0">
                <a href="{@referencddePage}">
                    <img src="{pic/@src}" width="{pic/@width}" height="{pic/@height}"/>
                </a>
            </td>
        </xsl:for-each>
    </tr>
</xsl:template>

Мой XML:

<?xml version="1.0" encoding="iso-8859-8"?>
<?xml-stylesheet type="text/xsl" href="xslFiles\smallPageBuilder.xsl"?>
<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>

Я хочу строку :a h r e f="{@referencddePage}" чтобы получить ввод от корня, :a h r e f= "{@referencddePage}"..., но я уже в <td level>.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2010

Я хочу, чтобы строка: 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}"/>
0 голосов
/ 22 сентября 2010

Используйте XPATH, который «перепрыгивает» на верхнюю часть документа с косой чертой, затем идите вниз по дереву:

/data/@referencePage

Применение к вашей таблице стилей:

<xsl:template match="row">
    <tr> 
        <xsl:for-each select="td"> 
            <td border="0">
                <a href="{/data/@referencePage}"> 
                    <img src="{pic/@src}" width="{pic/@width}" height="{pic/@height}"/> 
                </a>
            </td> 
        </xsl:for-each> 
    </tr> 
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...