Я хотел бы удалить определенный текст со страницы 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>