Я думаю, что это поможет. По существу, исправление округления вверх.
var nums = 1.12346;
nums = MathRound(nums, 4);
console.log(nums);
function MathRound(num, nrdecimals) {
let n = num.toFixed(nrdecimals);
return (n > num) ? n-(1/(Math.pow(10,nrdecimals))) : n;
}
Вы не должны хранить, вышел из HTML в Вашей базе данных. Если бы Ваша база данных содержала фактическое" <" символ, то команда "disable-output-escaping" сделала бы то, что Вы хотели.
Если Вы не можете изменить данные затем, необходимо будет не выйти из данных перед Вашим выполнять преобразование.
Базирующийся в предположении, что у Вас есть эта строка HTML,
<p>My name is Freddy & I was
затем, если бы Вы выходите из него и храните его в базе данных, это стало бы этим:
<p>My name is Freddy &amp; I was
Следовательно, при получении его как XML (не не выходя из него заранее), результат был бы этим:
&lt;p&gt;My name is Freddy &amp;amp; I was
и <xsl:value-of select="." disable-output-escaping="yes" />
произвел бы:
<p>My name is Freddy &amp; I was
Вы получаете точно то же самое, которое Вы имеете в своей базе данных, но конечно Вы видите HTML-тэги в выводе. Таким образом, то, в чем Вы нуждаетесь, является механизмом, который делает следующие строковые замены:
"&lt;"
с "<"
(эффективно изменение <
кому: <
в незавершенном ouput)"&gt;"
с ">"
(эффективно изменение >
кому: >
в незавершенном ouput)"&quot;"
с """
(эффективно изменение "
кому: "
в незавершенном ouput)"&amp;"
с "&"
(эффективно изменение &
кому: &
в незавершенном ouput)От Вашего XSL я вывел следующий тестовый входной XML:
<DocumentElement>
<QueryResults>
<Title>Article 1</Title>
<ArticleId>1</ArticleId>
<SEOTitle>Article_1</SEOTitle>
<Summary>&lt;p&gt;Article 1 summary &amp;amp; description.&lt;/p&gt;</Summary>
</QueryResults>
<QueryResults>
<Title>Article 2</Title>
<ArticleId>2</ArticleId>
<SEOTitle>Article_2</SEOTitle>
<Summary>&lt;p&gt;Article 2 summary &amp;amp; description.&lt;/p&gt;</Summary>
</QueryResults>
</DocumentElement>
Я изменил таблицу стилей, Вы предоставили и реализовали такой заменяющий механизм. Если Вы применяете следующий шаблон XSLT 1.0 к нему:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:namespace"
exclude-result-prefixes="my"
>
<xsl:output method="html" omit-xml-declaration="yes"/>
<my:unescape>
<my:char literal="<" escaped="&lt;" />
<my:char literal=">" escaped="&gt;" />
<my:char literal=""" escaped="&quot;" />
<my:char literal="&" escaped="&amp;" />
</my:unescape>
<xsl:template match="DocumentElement">
<div id="mySlides">
<xsl:apply-templates mode="slides" />
</div>
<div id="myController">
<xsl:apply-templates mode="controller" />
</div>
</xsl:template>
<xsl:template match="DocumentElement/QueryResults" mode="slides">
<div class="article">
<h2>
<a class="title" title="{Title}" href="{concat('/stories/stories-details/articletype/articleview/articleid/', ArticleId, '/', SEOTitle, '.aspx')}">
<xsl:value-of select="Title"/>
</a>
</h2>
<div class="articlesummary" style="text-indent: 25px;">
<xsl:apply-templates select="document('')/*/my:unescape/my:char[1]">
<xsl:with-param name="html" select="Summary" />
</xsl:apply-templates>
</div>
</div>
</xsl:template>
<xsl:template match="DocumentElement/QueryResults" mode="controller">
<span class="jFlowControl">
<xsl:text>aa </xsl:text>
<xsl:value-of select="Title" />
</span>
</xsl:template>
<xsl:template match="my:char">
<xsl:param name="html" />
<xsl:variable name="intermediate">
<xsl:choose>
<xsl:when test="following-sibling::my:char">
<xsl:apply-templates select="following-sibling::my:char[1]">
<xsl:with-param name="html" select="$html" />
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$html" disable-output-escaping="yes" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="unescape">
<xsl:with-param name="html" select="$intermediate" />
</xsl:call-template>
</xsl:template>
<xsl:template name="unescape">
<xsl:param name="html" />
<xsl:choose>
<xsl:when test="contains($html, @escaped)">
<xsl:value-of select="substring-before($html, @escaped)" disable-output-escaping="yes"/>
<xsl:value-of select="@literal" disable-output-escaping="yes" />
<xsl:call-template name="unescape">
<xsl:with-param name="html" select="substring-after($html, @escaped)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$html" disable-output-escaping="yes"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Затем этот вывод HTML производится:
<div id="mySlides">
<div class="article">
<h2>
<a class="title" title="Article 1" href="/stories/stories-details/articletype/articleview/articleid/1/Article_1.aspx">Article 1</a>
</h2>
<div class="articlesummary" style="text-indent: 25px;">
<p>Article 1 summary & description.</p>
</div>
</div>
<div class="article">
<h2>
<a class="title" title="Article 2" href="/stories/stories-details/articletype/articleview/articleid/2/Article_2.aspx">Article 2</a>
</h2>
<div class="articlesummary" style="text-indent: 25px;">
<p>Article 2 summary & description.</p>
</div>
</div>
</div>
<div id="myController">
<span class="jFlowControl">aa Article 1</span>
<span class="jFlowControl">aa Article 2</span>
</div>
Примечание:
<my:unescape>
) создать список символов для заменыunescape
обработайте по шаблону для переноса информации, какой символ должен быть заменен в данный моментКроме того, примечание:
templatenumber
параметр)<xsl:attribute>
элементы. Они могут безопасно быть заменены встроенной нотацией (attributename="{attributevalue}"
)concat()
функция для создания URLВообще говоря, это - плохая идея сохранить оставленный HTML в базе данных (в более общем плане говорящий: Это - плохая идея сохранить HTML в базе данных.). Вы собираетесь для получения всех видов проблем, при этом этот один из них. Если Вы не можете изменить эту установку, я надеюсь, что решение помогает Вам.
Я не могу гарантировать, что это делает правильную вещь во всех ситуациях, и это может открыться, дыры в системе безопасности (думайте XSS), но контакт с этим не был частью вопроса. В любом случае считайте себя, предупредил.
Я нуждаюсь в перерыве теперь.;-)
Это плохое представление о хранении HTML в базе данных
Что? Как вы должны хранить это тогда? В XML DOC, так что вы должны использовать XSLT в любом случае? В качестве веб-разработчика мы всегда использовали базы данных SQL для хранения пользовательских данных HTML. Нет ничего плохого в этом способе до тех пор, пока он планируется должным образом для ваших целей.