КАК заставить текст повторяться только один раз для каждого? - PullRequest
0 голосов
/ 10 апреля 2009

например, у меня есть XML-код, подобный этому:

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

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

        

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

КАК заставить ИМЯ повторяться только один раз для каждого? Не могли бы вы помочь мне? Благодарю вас Для примера Имя персонажа: LAFEU Имя персонажа: LAFEU

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

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

Я хотел бы задать еще одну вещь, связанную с этим вопросом. В случае, если CHARACTER находится в КВАРТАЛЕ много слоев, как это:

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

КАК ссылаться на ИМЯ в операторе For-each, я пробую это, но не работаю

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

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

Ответы [ 4 ]

2 голосов
/ 10 апреля 2009

Попробуйте это в своем коде 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>
1 голос
/ 10 апреля 2009

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

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

Сначала проверьте, если я могу предложить: http://www.w3schools.com/xml/xml_xsl.asp

как это:

ПРИМЕЧАНИЕ: (почти) никогда не используйте for-each !!!! конечно не здесь !! см. Здесь Однако, если вы настаиваете на этом, вы можете использовать ту же логику предшествующего брата, если хотите в закрытии для каждого.

<code><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" />    
      
</ XSL: шаблон>
    <xsl:value-of select="."/>
    
</ XSL: шаблон>
0 голосов
/ 12 апреля 2009

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

<code><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/>
        
</ XSL: шаблон> <! - Создать заголовок для пьесы -> Воспроизвести заголовок: </ XSL: шаблон> <! - Создать заголовок для сцены -> Название сцены: </ XSL: шаблон> <! - создать заголовок для акта -> Заголовок акта: </ XSL: шаблон> <! - создать имя для персонажа -> Имя персонажа: </ XSL: шаблон> <! - создать текст для цитаты -> Текст цитаты: </ XSL: шаблон> </ XSL: таблицы стилей>
0 голосов
/ 10 апреля 2009

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

<code><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>
        
</ XSL: шаблон> </ XSL: таблицы стилей>

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

<code><html>
  <body>
    <pre>
        Name of character: LA FEU
        Name of character: LA FEU
        Name of character: LA FEU
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...