Как я могу заменить контент HTML с помощью XSLT? - PullRequest
0 голосов
/ 04 апреля 2019

Я хотел бы удалить определенный текст со страницы HTML с помощью XSLT. Я хотел бы удалить текст <h2>OLD TEXT</h2>. Я пытаюсь удалить его, заменив текст пустой строкой, но у меня это не получается.

При вызове моей функции string-replace-all с текстом "<h2>OLD TEXT</h2>" в качестве ввода я получаю следующую ошибку:

The value of the attribute "select" associated with an element type "xsl:with-param" must not contain the '<' character.

При вызове моей функции string-replace-all просто "СТАРЫЙ ТЕКСТ" в качестве ввода текст заменяется, но вывод больше не HTML, это просто текст без тегов HTML.

Как я могу сделать замену <h2>OLD TEXT</h2> и при этом получить вывод в формате HTML?

Мой код:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


   <xsl:output method="html" />

   <xsl:template name="string-replace-all">
       <xsl:param name="text" />
       <xsl:param name="replace" />
       <xsl:param name="by" />
       <xsl:choose>
           <xsl:when test="$text = '' or $replace = ''or not($replace)" >
               <!-- Prevent this routine from hanging -->
               <xsl:copy-of select="$text" />
           </xsl:when>
           <xsl:when test="contains($text, $replace)">
               <xsl:copy-of select="substring-before($text,$replace)" />
               <xsl:copy-of select="$by" />
               <xsl:call-template name="string-replace-all">
                   <xsl:with-param name="text" select="substring-after($text,$replace)" />
                   <xsl:with-param name="replace" select="$replace" />
                   <xsl:with-param name="by" select="$by" />
               </xsl:call-template>
           </xsl:when>
           <xsl:otherwise>
               <xsl:copy-of select="$text" />
           </xsl:otherwise>
       </xsl:choose>
   </xsl:template>

   <xsl:variable name="updatedHtml">
    <xsl:call-template name="string-replace-all">
      <xsl:with-param name="text" select="//div[@id='mainContent']" />
      <xsl:with-param name="replace" select="'OLD TEXT'" />
      <xsl:with-param name="by" select="''" />
    </xsl:call-template>
  </xsl:variable>  


    <xsl:template match="//div[@id='mainContent']">         
        <xsl:copy-of select="$updatedHtml" />
    </xsl:template>


</xsl:stylesheet>

HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Test page</title>
</head>
  <body>
    <div id="container">
      <div id="mainContent">
        <h1>Header one</h1> 
        <p>Some text</p>
        <h2>OLD TEXT</h2> 
        <p>Some information about the old text</p>
        <br>
        More text
        <h2>Another header</h2>           
        Some information <strong>with strong</strong> text.
        <h2>Another header again</h2>           
        Some information <strong>with strong</strong> text.       
      </div>
    </div>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...