2009-04-10 2 views
0

, например, у меня есть код XML, как это:HOw, чтобы текст повторялся только один раз для каждого?

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

Мой XSLT код, чтобы преобразовать это в HTML:

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

Вывод таков: Имя персонажа: LAFEULAFEULAFEU

ХАУ чтобы повторить NAME только один раз для каждого? Не могли бы вы помочь мне? Спасибо вам например, имя персонажа: LAFEU Имя персонажа: LAFEU

Имя персонажа: LAFEU

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

Я хотел бы задать еще 1 вещь, связанная с этим вопросом. В случае, если ХАРАКТЕР находится под ЦИТАТОЙ много слоя, как это:

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

как ссылаться на имя в Форе-каждое утверждение, я стараюсь, но не работаете

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

могли бы вы помогите мне с этим? Спасибо вам

ответ

2

Попробуйте это в вашем коде XSLT:

<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

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

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

Это имеет следующий вывод:

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

UPDATE: это решения для избежания дублей на упорядоченном множестве, я перечитываю свой вопрос, и видел, как я, вероятно, извратить. Я оставляю свой ответ здесь, потому что он по крайней мере покажет вам, как избавиться от ненужных для каждой конструкции.

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

chekc здесь первым, если я могу предложить: http://www.w3schools.com/xml/xml_xsl.asp

так:

Примечание: (почти) никогда не используют для-каждый !!!! конечно нет здесь !! see here Если вы настаиваете на этом, вы можете использовать одну и ту же логику предшествующего брака, если хотите, для каждого закрытия.

<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

Я только что узнал, хороший способ справиться с этой проблемой: с помощью применять шаблоны, спасибо вы, ребята очень много :).

<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> 
Смежные вопросы