2016-04-04 7 views
0

XML in HTML-Tabelle verwandelt Deshalb mag ich ein XSLT machen, das jede XML nach der Regel verwandeln würde:Generisches XSLT, die mit Regeln

<root1> 
    <elem1>text</elem1> 
    <elem2>text</elem2> 
    ... 
    <elemx>text</elemx> 
    ... 
    <image>someimgreference</image 
    <linkref>alink</linkref> 
</root1> 

<root2> 
    <elem1>text</elem1> 
    <elem2>text</elem2> 
    ... 
    <elemx>text</elemx> 
    ... 
    <image>someimgreference</image 
    <linkref>alink</linkref> 
</root2> 

die mit Hilfe von XSLT Ich würde mit den Titeln einen Tisch bekommen und als ich haben Text, zeige ich nur den Text, wenn ich Bildlink habe ich das aktuelle Bild mit

<xsl:template match="image"> 
    <img src="{@url}" /> 
</xsl:template> 

oder etwas und wenn ich einen LinkRef haben, poste ich nur den Klick-able Link

root1/root2 ist nur ein Beispiel ... das könnten beliebige Namen sein, das gleiche gilt für elem1/2/3/... Ich möchte, dass xslt mit jedem XML mit dieser Struktur arbeitet. Also kein Verweis auf den Elementnamen.

HTML-Tabelle würde so aussehen:

elem1 | elem2 |... |image|linkref 
    ------------------------------------ 
    text | text |... |photo|link 
    text | text |... |photo|link 

ich einige gute Referenzen online gefunden, aber keiner hat mir wirklich geholfen den Tisch zu bekommen oder keine war allgemein genug. Ist es möglich was ich will? Oder wie nahe kann ich diesen generischen xslt bekommen?

Dies ist das generische, das ich gefunden habe. Ich brauche nur den Bild-Link zeigt als aktuelle Fotos und Link-Referenzen klicken-able Links

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
<HTML> 
<BODY> 
    <xsl:apply-templates/> 
</BODY> 
</HTML> 
</xsl:template> 

<xsl:template match="/*"> 
<TABLE BORDER="1"> 
<TR> 
     <xsl:for-each select="*[position() = 1]/*"> 
      <TD> 
       <xsl:value-of select="local-name()"/> 
      </TD> 
     </xsl:for-each> 
</TR> 
     <xsl:apply-templates/> 
</TABLE> 
</xsl:template> 

<xsl:template match="/*/*"> 
<TR> 
    <xsl:apply-templates/> 
</TR> 
</xsl:template> 

<xsl:template match="/*/*/*"> 
<TD> 
    <xsl:value-of select="."/> 
</TD> 
</xsl:template> 
</xsl:stylesheet> 

Ich weiß nicht, wo die Bildschablone oder die Link-Vorlagen eingefügt werden (oder wie die Link-Vorlage schreiben) Ich habe versucht, es wie eine normale Vorlage einzufügen und es funktioniert nicht. Es wird nichts mit der Verbindung tun. Ganz zu schweigen von der anklickbaren ... Irgendwelche Ideen? Überhaupt?

+0

Haben Sie irgendeine Probe xslt probiert? Kannst du bitte posten? – Rao

+0

Ich bearbeitet und den generischen Code hinzugefügt, um beliebige XML in einer Tabelle zu transformieren ... Ich brauche nur die Bild-Links in Fotos umgewandelt werden und Link-Referenzen in Click-fähigen Links umgewandelt werden – Mocktheduck

+0

Irgendwelche Ideen? Ich fügte den ganzen Code hinzu, den ich an – Mocktheduck

Antwort

1

Sie haben die richtige Vorlage bekam in den Kommentaren zu verwenden, aber Sie wahrscheinlich ein priority Attribut hinzufügen müssen, um sie vor dem /*/*/*

<xsl:template match="image" priority="2"> 
    <td> 
    <img src="{.}" /> 
    </td> 
</xsl:template> 

Alternativ passend ein abgestimmt wird, um sicherzustellen, wiederholt zu speichern Ausgeben td Tags für jede Vorlage, könnten Sie Ausgabe in der Vorlage, die tr übereinstimmt, bevor die Vorlagen Anlegen des Kindes anzupassen Knoten

Versuchen Sie, diese XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<HTML> 
<BODY> 
    <xsl:apply-templates/> 
</BODY> 
</HTML> 
</xsl:template> 

<xsl:template match="/*"> 
<TABLE BORDER="1"> 
<TR> 
     <xsl:for-each select="*[position() = 1]/*"> 
      <TD> 
       <xsl:value-of select="local-name()"/> 
      </TD> 
     </xsl:for-each> 
</TR> 
     <xsl:apply-templates/> 
</TABLE> 
</xsl:template> 

<xsl:template match="/*/*"> 
<TR> 
    <xsl:for-each select="*"> 
     <td> 
     <xsl:apply-templates select="." /> 
     </td> 
    </xsl:for-each> 
</TR> 
</xsl:template> 

<xsl:template match="image"> 
    <img src="{.}" /> 
</xsl:template> 

<xsl:template match="linkref"> 
    <a href="{.}"> 
    <xsl:value-of select="." /> 
    </a> 
</xsl:template> 
</xsl:stylesheet> 
+0

Das funktioniert! Du bist ein Gott in diesem! – Mocktheduck