4 Stimmen

Hyperlinks in XSLT-Vorlagen

Ich versuche, Hyperlinks mit Hilfe von XML-Informationen und XSLT-Vorlagen zu erstellen. Hier ist die XML-Quelle.

<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>

Ich möchte, dass die Ausgabe wie folgt aussieht, wobei die Firmennamen Hyperlinks sind, die auf den "smartTextLink"-Tags in der Xml-Datei basieren.

Bei den Einzelwerten sind die größten prozentualen Zuwächse im S.&P. 500 sind Eastman Kodak Co und Huntington Bancshares Inc.

Hier sind die Vorlagen, die ich im Moment verwende. Ich kann den Text anzeigen lassen, aber nicht die Hyperlinks.

<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>      

Ich habe mehrere Varianten ausprobiert, um die Hyperlinks richtig zum Laufen zu bringen. Ich denke, dass die Vorlage match="smartTextLink" aus irgendeinem Grund nicht instanziiert wird. Hat jemand eine Idee, wie ich das zum Laufen bringen kann?

EDIT: Nachdem ich einige der Antworten gelesen habe, funktioniert es in meiner Gesamtanwendung immer noch nicht.

Ich rufe die smartText-Vorlage aus meiner Hauptvorlage auf

unter Verwendung der folgenden Anweisung...

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

Könnte dies auch ein Teil des Problems sein?

Dankeschön

Shane

6voto

Pete Kirkham Punkte 47746

Entweder verschieben Sie die xsl:attribute vor allen Kindern, oder verwenden Sie ein Attributwertvorlage .

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

De la Attribute erstellen Abschnitt der XSLT 1-Spezifikation:

Die folgenden Fehler sind alle vorhanden:

  • Hinzufügen eines Attributs zu einem Element, nachdem diesem bereits Kinder hinzugefügt wurden; Implementierungen können entweder den Fehler melden oder das Attribut ignorieren.

5voto

marc_s Punkte 701497

Versuchen Sie dies - bei mir hat es funktioniert:

<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>

Der Trick ist. <xsl:attribute> bevor Sie eine andere Verarbeitung vornehmen.

Marc

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X