Проблема сортировки с данными Alpha numeri c в шаблоне BI Publisher RTF - PullRequest
0 голосов
/ 28 мая 2020

У меня ниже XML и я хочу отсортировать дочерние данные по алфавиту и цифрам c, но возникают проблемы при сортировке.

<LEVEL>
 <PARENT>
   <CHILD>D1</CHILD>
 </PARENT>
 <PARENT>
  <CHILD>A2</CHILD>
 </PARENT>
 <PARENT>
  <CHILD>A1</CHILD>
 </PARENT>
 <PARENT>
  <CHILD>A1</CHILD>
 </PARENT>
 <PARENT>
  <CHILD>CD1234</CHILD>
 </PARENT>
 <PARENT>
  <CHILD>1</CHILD>
 </PARENT>
 <PARENT>
  <CHILD>2</CHILD>
 </PARENT>
 <PARENT>
  <CHILD>11</CHILD>
 </PARENT>
 <PARENT>
  <CHILD>9</CHILD>
 </PARENT>
 <PARENT>
  <CHILD>4</CHILD>
 </PARENT>
 <PARENT>
  <CHILD>C3</CHILD>
 </PARENT>
 </LEVEL>

Я пробовал использовать тип данных как число и текст (по возрастанию и по убыванию). прикрепление опробованного сценария ios и требуемого вывода. Не могли бы вы помочь?

enter image description here

1 Ответ

0 голосов
/ 28 мая 2020

Сортировка сначала по тексту, затем по номеру:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/LEVEL">
    <xsl:copy>
        <xsl:for-each select="PARENT">
            <xsl:sort select="translate(CHILD, '0123456789', '')" data-type="text" order="ascending"/>
            <xsl:sort select="translate(CHILD, translate(CHILD, '0123456789', ''), '')" data-type="number" order="ascending"/>
            <xsl:copy-of select="CHILD"/>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Результат

<?xml version="1.0" encoding="UTF-8"?>
<LEVEL>
   <CHILD>1</CHILD>
   <CHILD>2</CHILD>
   <CHILD>4</CHILD>
   <CHILD>9</CHILD>
   <CHILD>11</CHILD>
   <CHILD>A1</CHILD>
   <CHILD>A1</CHILD>
   <CHILD>A2</CHILD>
   <CHILD>C3</CHILD>
   <CHILD>CD1234</CHILD>
   <CHILD>D1</CHILD>
</LEVEL>
...