Гиперссылки в шаблонах XSLT - PullRequest
4 голосов
/ 01 апреля 2009

Я пытаюсь создать гиперссылки, используя информацию XML и шаблоны XSLT. Вот источник XML.

<smartText>
Among individual stocks, the top percentage gainers in the S. and P. 500 are 
<smartTextLink smartTextRic="http://investing.domain.com/research/stocks/snapshot
/snapshot.asp?ric=HBAN.O">Huntington Bancshares Inc</smartTextLink>
and 
<smartTextLink smartTextRic="http://investing.domain.com/research/stocks/snapshot
/snapshot.asp?ric=EK">Eastman Kodak Co</smartTextLink>
.
</smartText>

Я хочу, чтобы выходные данные выглядели так, чтобы названия компаний были гиперссылками, основанными на тегах "smartTextLink" в Xml.

Среди отдельных акций самые высокие проценты получают в S. & P. 500 - Eastman Kodak Co и Huntington Bancshares Inc.

Вот шаблоны, которые я сейчас использую. Я могу получить текст для отображения, но не гиперссылки.

<xsl:template match="smartText">
  <p class="smartText">
    <xsl:apply-templates select="child::node()" />
  </p>
</xsl:template>

<xsl:template match="smartTextLink">
  <a>
    <xsl:apply-templates select="child::node()" />
    <xsl:attribute name="href">
      <xsl:value-of select="@smartTextRic"/>
    </xsl:attribute>
  </a> 
</xsl:template>      

Я пробовал несколько вариантов, чтобы заставить гиперссылки работать правильно. Я думаю, что шаблон match = "smartTextLink" не создается по какой-то причине. У кого-нибудь есть идеи о том, как я могу заставить это работать?

РЕДАКТИРОВАТЬ: после рассмотрения некоторых ответов он все еще не работает в моем общем приложении.

Я вызываю шаблон smartText из моего основного шаблона

используя следующее утверждение ...

<xsl:value-of select="marketSummaryModuleData/smartText"/>   

Может ли это быть частью проблемы?

Спасибо

Шейн

Ответы [ 2 ]

6 голосов
/ 01 апреля 2009

Либо переместите xsl:attribute перед любым потомком, либо используйте шаблон значения атрибута .

<xsl:template match="smartTextLink">
    <a href="{@smartTextRic}">
        <xsl:apply-templates/>
    </a> 
</xsl:template>

Из раздела создания атрибутов спецификации XSLT 1:

Следующие ошибки:

  • Добавление атрибута к элементу после добавления к нему дочерних элементов; реализации могут либо сигнализировать об ошибке, либо игнорировать атрибут.
5 голосов
/ 01 апреля 2009

Попробуйте это - у меня сработало:

<xsl:template match="smartText">
    <p class="smartText">
      <xsl:apply-templates/>
    </p>
  </xsl:template>

  <xsl:template match="smartTextLink">
    <a>
      <xsl:attribute name="href">
        <xsl:value-of select="@smartTextRic"/>
      </xsl:attribute>
      <xsl:value-of select="text()"/>
    </a>
  </xsl:template>

Сначала уловка - <xsl:attribute>, прежде чем выполнять какую-либо другую обработку.

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...