2012-06-22 2 views
0

Источник:получения значения предыдущих элементов в другом шаблоне XSLT

<Data> 
    <AB> 
     <choice>Disclose</choice> 
     <image> 
      <img alt="No Image" xlink:href="abcd:202-11587" xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="Image" /> 
     </image> 
     <link>abcd</link> 
    </AB> 
    <AB> 
     <choice>All</choice> 
     <image> 
      <img alt="No Image" xlink:href="abcd:202-2202" xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="Image" /> 
     </image> 
     <link>all</link> 
    </AB>  
</Data> 

XSLT

<xsl:template match="Data"> 
     <xsl:for-each select="AB"> 
     <xsl:variable name="temp" select="choice"/> 
      <xsl:choose> 
       <xsl:when test="$temp='Disclose'"> 
       <xsl:apply-templates select="image/node()"/>     
       </xsl:when> 
      </xsl:choose> 
     </xsl:for-each> 

    </xsl:template> 

    <xsl:template match="simple:image/xhtml:img"> 
    <!-- I want to get the the name of the "choice" here--> 

    <!-- some other process--> 
    <!-- how to access the value of the <choice> element of that section--> 
    <!-- how to access <link> element of that section--> 
    </xsl:template> 

Может ли один помочь, как это сделать.

+0

могли бы вы изменить свой вопрос, чтобы сделать его немного более ясно точно, что спрашивается? Не сразу очевидно, что комментарии в вашем примере XSLT на самом деле являются вопросом здесь. Отображение ожидаемого результата также поможет. Благодаря! –

ответ

2

Во-первых, это может быть просто упущение с образцом кода, вы заданные пространства имен в шаблоне соответствия

<xsl:template match="simple:image/xhtml:img"> 

Однако, нет никаких ссылок на «простые» пространство имен в вашем образце XML, так что в этом случае она должна быть просто следующая

<xsl:template match="image/xhtml:img"> 

Но в ответ на свой вопрос, чтобы получить элемент выбора, потому что вы в настоящее время posisioned на IMG элемент, вы можете искать обратно вверх по иерархии, как так

<xsl:value-of select="../../choice" /> 

«..» представляет родительский элемент. Итак, вы возвращаетесь к элементу AB и получаете его ребенка выбор элемент.

И аналогично для звена элемента

<xsl:value-of select="../../link" /> 

Обратите внимание, что не должен быть XSL: стоимость отсюда, если бы множественными ссылка элементов, вы могли бы использовать XSL: применять-шаблоны

<xsl:apply-templates select="../../link" /> 

И, если вам требуется только ссылка элементов, которые произошли осле родительский изображение элемент, вы могли бы сделать что-то вроде этого

<xsl:apply-templates select="../following-sibling::link" /> 
+0

Спасибо за ответ – Patan

Смежные вопросы