Как сделать абзац более чем одной строкой, используя xsl - PullRequest
1 голос
/ 13 сентября 2011

В абзаце у меня должно быть более одной строки, это должно быть как 3 строки или более, но не просто как один, а одно другое, мне нужно убрать '...', '…' и заменить его просто период.

Мне нужно добавить точку для каждого предложения после ... в xsl, а абзац должен быть больше 1 строки.

Мне нужно заменить ... точкой в ​​каждом предложении, а абзац должен быть больше 1 строки. используя xsl

XML выглядит так:

<data>The production of opium itself has basically not changed since
ancient times...Opium trade became more regular by the seventeenth
century, when it was mixed with tobacco for smoking, and addiction was
first recognized... This is a test Message3…This is showing off a
handful of updates to its line of audio accessories this week at IFA
in Berlin. At top of the list is the newly revealed inAir 5000, a
hefty tabletop AirPlay speaker that the company is firmly positioning
to take on Bowers&Wilkins' Zeppelin line (which also recently got its
own AirPlay version)... Like that system, the inAir certainly offers a
unique take on aesthetics, with a teardrop design. The company opted
not to install an Apple dock on the 110 watt system, given that
compatible devices can stream audio wirelessly to the thing via
AirPlay...Twice a month, tourists board a bus and embark on a "fact-finding mission" to one of the hottest spots in the immigration debate -- the Arizona-Mexico border. Tourists are encouraged to make make up their own minds. </data>

Мой вывод должен выглядеть следующим образом: абзац нужно разбить на три равные строки.

<p>This is showing off a handful of updates to its line of audio accessories this week at IFA in Berlin. At top of the list is the newly revealed inAir 5000, a hefty tabletop AirPlay speaker that the company is firmly positioning to take on Bowers&Wilkins' Zeppelin line (which also recently got its own AirPlay version).</p>
              <p>Like that system, the inAir certainly offers a unique take on aesthetics, with a teardrop design. The company opted not to install an Apple dock on the 110 watt system, given that compatible devices can stream audio wirelessly to the thing via AirPlay.Twice a month, tourists board a bus and embark on a "fact-finding mission" to one of the hottest spots in the immigration debate -- the Arizona-Mexico border. Tourists are encouraged to make make up their own minds.</p>

Пожалуйста, помогите мне.

1 Ответ

1 голос
/ 13 сентября 2011

Вы можете использовать рекурсивный шаблон как этот:

<xsl:template match="data" name="data">
  <xsl:param name="text" select="." />
  <xsl:choose>
    <xsl:when test="contains($text,'...')">
      <xsl:call-template name="data">
        <xsl:with-param name="text" select="substring-before($text,'...')" />
      </xsl:call-template>
      <xsl:call-template name="data">
        <xsl:with-param name="text" select="substring-after($text,'...')" />
      </xsl:call-template>
    </xsl:when>

    <xsl:when test="contains($text,'…')">
      <xsl:call-template name="data">
        <xsl:with-param name="text" select="substring-before($text,'…')" />
      </xsl:call-template>
      <xsl:call-template name="data">
        <xsl:with-param name="text" select="substring-after($text,'…')" />
      </xsl:call-template>
    </xsl:when>

    <xsl:otherwise>
      <p>
        <xsl:value-of select="concat($text,'.')" />
      </p>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

То, что это в основном делает, - это когда он обрабатывает любой текст, в котором есть ... или ..., он вызывает себя с тем, что находится до и после ... / ..., обрабатывая каждый фрагмент одинаково. Если его нет в нем, он просто выводит абзац и ставит точку.

С приведенным примером это фактически даст вам пустой абзац внизу, потому что он заканчивается на ...; Вы можете удалить пустые абзацы, например, заменив последний <xsl:otherwise> на <xsl:when test="normalize-space($text)"> (и соответствующий закрывающий тег).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...