Выберите выделенный фрагмент текста с узла [duplicate]

Я пошел в систему

preferences -> mysql -> initialize database -> использовать устаревшее шифрование пароля (вместо сильного) -> ввести тот же пароль

в качестве файла config.inc.php, перезапустил сервер Apache, и он сработал. Я все еще подозревал об этом, поэтому я остановил сервер apache и mysql и начал их снова, и теперь он работает.

0
задан Onetyper 21 November 2015 в 10:09
поделиться

2 ответа

Извлечение значений из списка с разделителями в XSLT 1.0 неудобно, поскольку у него нет функции tokenize().

Если количество значений в списке невелико (как в вашем примере), вы можете использовать вложенные substring-before() и substring-after() вызовы, как показано (сейчас) в вашем вопросе.

Более общее решение, которое также более подходит для обработки больших списков, будет использовать рекурсивный именованный шаблон, например:

<xsl:template name="get-Nth-value">
    <xsl:param name="list"/>
    <xsl:param name="N"/>
    <xsl:param name="delimiter" select="' '"/>
    <xsl:choose>
        <xsl:when test="$N = 1">
            <xsl:value-of select="substring-before(concat($list, $delimiter), $delimiter)"/>
        </xsl:when>
        <xsl:when test="contains($list, $delimiter) and $N > 1">
            <!-- recursive call -->
            <xsl:call-template name="get-Nth-value">
                <xsl:with-param name="list" select="substring-after($list, $delimiter)"/>
                <xsl:with-param name="N" select="$N - 1"/>
                <xsl:with-param name="delimiter" select="$delimiter"/>
            </xsl:call-template>
        </xsl:when>
    </xsl:choose>
</xsl:template>

Пример вызова:

<xsl:template match="item">
    <rect>
        <xsl:attribute name="x">
            <xsl:call-template name="get-Nth-value">
                <xsl:with-param name="list" select="@value"/>
                <xsl:with-param name="N" select="1"/>
            </xsl:call-template>                
        </xsl:attribute>
        <xsl:attribute name="y">
            <xsl:call-template name="get-Nth-value">
                <xsl:with-param name="list" select="@value"/>
                <xsl:with-param name="N" select="2"/>
            </xsl:call-template>                
        </xsl:attribute>
    </rect>
</xsl:template>

Демо: http://xsltransform.net/ncdD7mh

1
ответ дан michael.hor257k 28 August 2018 в 06:10
поделиться

Вот пример использования расширений EXSLT, онлайн в http://xsltransform.net/bnnZW2 , код

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
  xmlns:exsl="http://exslt.org/common" xmlns:str="http://exslt.org/strings" exclude-result-prefixes="exsl str">

    <xsl:include href="http://exslt.org/str/functions/tokenize/str.tokenize.template.xsl"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="item">
      <xsl:copy>
        <xsl:variable name="tokens-rtf">
            <xsl:call-template name="str:tokenize">
                <xsl:with-param name="string" select="@value"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:variable name="tokens" select="exsl:node-set($tokens-rtf)/token"/>
        <x>
            <xsl:value-of select="$tokens[1]"/>
        </x> 
        <y>
            <xsl:value-of select="$tokens[2]"/>
        </y>
      </xsl:copy>

    </xsl:template>
</xsl:transform>

: вход

<root>
    <item value="20 10 40" />
    <item value="200 0 100" />
    <item value="2666 10 40 95" />
</root>

выход

<root>
    <item><x>20</x><y>10</y></item>
    <item><x>200</x><y>0</y></item>
    <item><x>2666</x><y>10</y></item>
</root>

Должно быть понятно, как получить доступ к другим токенам по позиции, вы также можете for-each или apply-templates по $tokens.

Обратите внимание, что процессоры XSLT в браузерах могут не разрешать вам импортировать или включать модуль таблиц стилей из другого домена, поэтому вы должны убедиться, что вы разместили ссылочный модуль стилей (str.tokenize.template.xsl) на своем собственном сервере и ссылаться на него оттуда.

1
ответ дан Martin Honnen 28 August 2018 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: