Пагинация в XSLT - PullRequest
       17

Пагинация в XSLT

0 голосов
/ 26 января 2011

Мой запрос как ниже. В EmpNumberList будет 250 номеров EmpNum, разделенных пробелом.

<soapenv:Body>      
     <v1:MRRequestParam>
        <v1:EmpNumberList><v1:EmpNumber>    9989071005 2004421004</v1:EmpNumber></v1:EmpNumberList>
     </v1:MRRequestParam>       
</soapenv:Body>

XSLT, который мне нужно написать, должен считать EmpNumbers из EmpNumbersList Мне нужно вызвать хранимую процедуру в моем XSLT, чтобы я сделал 5 вызовов. За один звонок я передаю только 50 номеров EmpNumbers. Я звоню в общей сложности 5 раз

Первый звонок будет иметь $ EmpNumber1 таким образом, что он содержит 50 EmpNumbers

$EmpNumber1 =     9989071005    2004421004 (so on 50 EmpNumbers)

<argument type="SQL_VARCHAR" mode="INPUT" nullable="true" precision="0" scale="0" isNull="false"><xsl:value-of select="$EmpNumber1" />
</argument>

Когда я отправляю ответ, мне нужно объединить все 5 результатов и отправить их одновременно. Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения

1 Ответ

2 голосов
/ 26 января 2011

Это просто:

Использование :

string-length(translate(normalize-space(/*/*/*/v1:EmpNumber), '0123456789',''))+1

При применении к этому документу (предоставляется еще один номер):

<soapenv:Body xmlns:soapenv="my:soapenv">
    <v1:MRRequestParam xmlns:v1="my:v1">
        <v1:EmpNumberList>
            <v1:EmpNumber>    9989071005 2004421004 1234567890 </v1:EmpNumber>
        </v1:EmpNumberList>
    </v1:MRRequestParam>
</soapenv:Body>

возвращается искомый, правильный результат:

3

Вот полная таблица стилей XSLT 1.0 для запуска и проверки правильности результатов всегда :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:soapenv="my:soapenv" xmlns:v1="my:v1">
 <xsl:output method="text"/>

    <xsl:template match="/">
      <xsl:value-of select=
      "string-length(
            translate(normalize-space(/*/*/*/v1:EmpNumber), '0123456789','')
                     )+1"/>
    </xsl:template>
</xsl:stylesheet>

Do note : Вы должны указать правильные пространства имен в преобразовании и в XML-документе - вы не предоставили их в своем вопросе.

Объяснение :

Значение этого выражения:

      string-length(
            translate(normalize-space(/*/*/*/v1:EmpNumber), '0123456789','')
                     )+1

:

  1. normalize-space().Он берет строку и создает из нее новую строку, в которой удаляются все начальные и конечные пробельные символы.

  2. Остаются только цифры с одним промежуточным пробеломмежду каждыми двумя числами .Таким образом, если имеется N чисел, количество пробелов равно N-1.

  3. Функция translate(), указанная в выражении, возвращаетновая строка, в которой пропали все цифры (заменяется пустой строкой ''. Остались только пробелы.

  4. Использование string-length() function мы просто получаем количество этих пробелов ** (N-1). Добавляем 1 и получаем число N всех чисел в строке.

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