XSLT Перевести выпуск - PullRequest
       1

XSLT Перевести выпуск

0 голосов
/ 02 февраля 2019

Я использую функцию translate () в скрипте xslt, чтобы удалить ненужную строку из повторяющегося элемента перед рендерингом вывода.В то время как функция перевода выполняет свою работу, она затрагивает несколько этих элементов, удаляя больше символов, чем нужно, и я не могу понять, почему это происходит.

Вот пример XML-документа:

<?xml version="1.0" encoding="utf-8"?><books><book><title>Keep this text [remove this text]</title></book><book><title>Keep this text 2 [remove this text]</title></book><book><title>Keep this text 3 [remove this text]</title></book><book><title>Keep this text 4</title></book></books>

Вот ОЧЕНЬ базовый пример XSLT, который проверяет строку [remove this text] из элемента title (эта функция вложена вцикл for-each):

<xsl:value-of select="translate(books/book/title, '[remove this text]', '')" />

Это успешно удаляет нежелательную строку и в большинстве случаев сохраняет предыдущий текст без проблем.К сожалению, в некоторых проблемах в результате вывода элемента title будет отсутствовать несколько символов (все пробелы удалены), и он будет выглядеть как «kpptt2» вместо «Keep this text 2».Кто-нибудь знает, почему это может произойти и / или производит случайности, такие как этот пример?Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019
    <xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="//text()">
    <xsl:value-of select="replace(., '\s\[remove\sthis\stext\]', '')"/>
</xsl:template>

Этот код конкретного текста '[удалить этот текст]' удалить

0 голосов
/ 02 февраля 2019
    <xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="*/text()">
    <xsl:choose>
        <xsl:when test="contains(., '[remove this text]')">
            <xsl:value-of select="substring-before(., ' [remove this text]')"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="."/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

версия 1.0 использовать

0 голосов
/ 02 февраля 2019
    <xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="//text()">
    <xsl:value-of select="replace(., '\s\[\w+\s\w+\s\w+\]', '')"/>
</xsl:template>

PLZ чек

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