2009-04-10 11 views
0

zum Beispiel habe ich den XML-Code wie folgt aus:HOW, um den Text nur einmal für jeden zu wiederholen?

<quotes> 
    <quote> 
    <character> 
     <name>LA FEU</name> 
    </character> 
    </quote> 

    <quote> 
    <character> 
     <name>LA FEU</name> 
    </character> 
    </quote> 

    <quote> 
    <character> 
     <name>LA FEU</name> 
    </character> 
    </quote> 
</quotes> 

Mein XSLT-Code, dies zu HTML zu transformieren:

<html> 
     <body> 
     <pre> 
      <xsl:for-each select="quotes/quote"> 
      <!--Output name of the character in underline--> 
      Name of character: <xsl:apply-templates select="//name"/> 
      </xsl:for-each> 

     </pre> 
     </body> 
</html> 

Die Ausgabe ist wie folgt: Name des Charakters: LAFEULAFEULAFEU

HOw um den NAME nur einmal für jeden wiederholen zu lassen? Würden Sie mir bitte helfen? Vielen Dank zum Beispiel Name des Charakters: Lafeu Name des Charakters: Lafeu

Name des Charakters: Lafeu

===================== ================================================= ========================

Ich möchte 1 weitere Sache zu dieser Frage fragen. Im Fall, wenn CHARACTER ZITATE unter vielen Schicht ist, wie folgt aus:

<quotes> 
     <quote> 
     <!--play 1--> 
     <play> 
      <playtitle>All's Well That Ends Well</playtitle> 
      <act> 
      <acttitle>ACT IV</acttitle> 
      <scene> 
       <scenetitle>SCENE I</scenetitle> 
       <speech> 
       <name> 
        <name>LAFEU</name> 
       </name> 
................ 

wie kommt man zum Namen in der foreach-Anweisung verweisen, versuche ich das, aber arbeiten Sie daher nicht

<xsl:for-each select="quotes/quote"> 
      <!--Output name of the character in underline--> 
      Name of character: <xsl:value-of select="play/*/name"/> 
    </xsl:for-each> 

bitte Hilf mir dabei? Vielen Dank

Antwort

2

Versuchen Sie dies in Ihrem XSLT-Code:

<xsl:for-each select="quotes/quote/character"> 
    <!--Output name of the character in underline--> 
    Name of character: <xsl:apply-templates select="name"/> 
</xsl:for-each> 
0

Hier gehen Sie! Ich habe versucht, so wenig Änderungen wie möglich an Ihrem XSLT vorzunehmen, um die gewünschte Ausgabe zu erzielen.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:template match="/"> 
    <html> 
     <body> 
     <pre> 
      <xsl:for-each select="quotes/quote"> 
      <!--Output name of the character in underline--> 
      Name of character: <xsl:apply-templates select="character/name"/> 
      </xsl:for-each> 
     </pre> 
     </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

Dies hat die folgende Ausgabe:

<html> 
    <body> 
    <pre> 
     Name of character: LA FEU 
     Name of character: LA FEU 
     Name of character: LA FEU 
    </pre> 
    </body> 
</html> 
1

UPDATE: diese Lösungen zur Vermeidung von Doppel auf eine geordnete Menge ist, nachzulesen ich Ihre Frage, und sah, wie ich wohl falsch interpretieren. Ich lasse meine Antwort hier, weil es Ihnen zumindest zeigt, wie Sie eine unnötige für jede Konstruktion loswerden können.

Die Frage, die Sie aks jedoch tun, ist von einem Niveau unter Anfänger ich habe Angst. Du solltest die Grundlagen zuerst lernen. Jetzt fragst du: "Tue meine Arbeit für mich bitte".

chekc hier zuerst, wenn ich könnte darauf hindeuten,: http://www.w3schools.com/xml/xml_xsl.asp

wie folgt aus:

HINWEIS: (fast) nie for-each verwenden !!!! sicherlich nicht hier !! see here Wenn Sie jedoch darauf bestehen, können Sie die gleiche Logik für vorhergehende Geschwister verwenden, wenn Sie in einem for-close möchten.

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <html> 
    <body> 
     <pre>  
     <xsl:apply-templates select="//quote[not(./character/name = preceding-sibling::quote/character/name)]/character/name" />  
     </pre> 
    </body> 
    </html> 
</xsl:template> 

<xsl:template match="name"> 
    <pre> 
    <xsl:value-of select="."/> 
    </pre> 
    </xsl:template> 
0

Ich habe nur gute Art und Weise herausgefunden, mit diesem Problem fertig zu werden: Vorlagen anwenden verwenden, danke euch sehr viel :).

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <!--Handle the document: set up HTML page--> 
    <xsl:template match="/"> 
    <html> 
     <body> 
     <pre> 
      THIS IS ANOTHER TEST 
      <!--Display number of quotes in the document--> 
      There is <xsl:value-of select="count(/*/quote)"/> quotes in the document  
      <xsl:apply-templates/> 
     </pre> 
     </body> 
    </html> 
    </xsl:template> 
    <!--Create the title for the play--> 
    <xsl:template match="playtitle"> 
    Play title: <xsl:value-of select="."/> 
    </xsl:template> 
    <!--Create the title for the scene--> 
    <xsl:template match="scenetitle"> 
    Scene title: <xsl:value-of select="."/> 
    </xsl:template> 
    <!--create the title for act--> 
    <xsl:template match="acttitle"> 
    Act title: <xsl:value-of select="."/> 
    </xsl:template> 
    <!--create the name for the character--> 
    <xsl:template match="name"> 
    Character name: <span style="font-weight:bold;text-decoration:underline;"> 
    <xsl:value-of select="."/> 
    </span> 
    </xsl:template> 
    <!--create the text for the quote--> 
    <xsl:template match="line"> 
     Quote text: 
      <xsl:value-of select="."/> 
    </xsl:template> 
</xsl:stylesheet> 
Verwandte Themen