Как скопировать текст в середине раздела в конец этого же раздела с помощью XSLT? - PullRequest
0 голосов
/ 25 февраля 2020

Мне нужно скопировать этот текст <p><i>Updated on 10/01/19</i></p> из середины раздела в конец раздела, используя XSLT.

Вот раздел, содержащий текст:

<section property="ktp:explanation" typeof="ktp:Explanation" 
  class="ktp-explanation jasper-exclude">
  <section property="ktp:explanation-section" typeof="ktp:feedback" 
    class="ktp-explanation-section jasper-exclude" data-title="Explanation">
    <section property="ktp:subsection" typeof="ktp:feedback" 
      class="ktp-explanation-section jasper-exclude" data-title="ReKap">
      <p class="reKap-title"><b>ReKap</b></p>
      <ul class="list-bullet">
        <li>Spindle afferents sense tension and stretching 
          of intrafusal muscle fibers.</li>
        <li>The tendon tap reflex
          stretches the intrafusal fibers, 
          initiating a contraction to restore initial muscle
          length (myotatic reflex).</li>
      </ul>
    </section>
    <section property="ktp:subsection" typeof="ktp:feedback" 
      class="ktp-explanation-section jasper-exclude" data-title="Analysis">
      <p class="analysis-title"><b>Analysis</b></p>
      <p><b>The correct answer is E. Spindle afferents</b> 
        and other sensory fibers innervate the <b>intrafusal fibers</b> 
        and detect changes in muscle stretch and tension.</p>
      <p>
        <i>Updated on 10/01/19</i></p>
    </section>
    <section property="ktp:subsection" typeof="ktp:feedback" 
      class="ktp-explanation-section jasper-exclude atom-exclude" 
      data-title="High Yield Breakdown">
      <p>High Yield Breakdown placeholder text.</p>
    </section>
    <section property="ktp:subsection" typeof="ktp:feedback" 
      class="ktp-explanation-section jasper-exclude atom-exclude" 
      data-title="Discussion">
      <p>Discussion text.</p>
    </section>
  </section>
</section>
<section property="ktp:explanation-section" typeof="ktp:feedback" 
  data-title="Resources" class="ktp-explanation-section jasper-exclude">
  <p><i>MedEssentials (4th Ed.):</i> pp. 202</p>
  <p><i>First Aid (2019): </i> pp. 498.1</p>
  <iframe class="armando" height="500" 
    src="https://www.youtube.com/embed/bY0oQnflmog?start=466"></iframe>
</section>
</section>

Вот раздел моего скрипта, который выполняет преобразование:

<xsl:template match="xhtml:section[@data-title = 'Explanation']"> 
  <section property="ktp:explanation-section" typeof="ktp:feedback" 
    class="ktp-explanation-section jasper-exclude" data-title="Explanation">  
    <xsl:apply-templates
      select="xhtml:section[@data-title = 'ReKap']"/>
    <xsl:apply-templates
      select="xhtml:section[@data-title = 'Analysis']"/>
    <xsl:copy-of
      select="following-sibling::xhtml:section
        [@data-title = 'Resources']/xhtml:iframe"/>
    <xsl:apply-templates
      select="xhtml:section[@data-title = 'High Yield Breakdown']"/>
    <xsl:apply-templates
      select="xhtml:section[@data-title = 'Discussion']"/>
  </section>
</xsl:template>

Мне нужно, чтобы строка <p><i>Updated on 10/01/19</i></p> была помещена после секции iframe. Как бы я это сделал?

1 Ответ

0 голосов
/ 26 февраля 2020

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

a) Для подавления абзацев, содержащих строку «Обновлено», попробуйте добавить шаблон следующим образом:

<xsl:template match="p">
  <xsl:if test="not (descendant-or-self::*[contains(text(), "Updated on")])">
    <xsl:apply-templates/>
  </xsl:if>
</xsl:template>

b) для вставки где-то внутри section[@data-title='Explanation'], попробуйте:

<xsl:copy-of 
  select="xhtml:section/p[descendant-or-self::*[contains(text(), "Updated on")]]">

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

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