левая панель, используя "current ()" внутри "format-number ()" в xslt - PullRequest
0 голосов
/ 08 октября 2019

У меня есть элемент xml <RandomNumber>, размер строки которого всегда равен 8 или 9 цифрам. Если длина строки элемента больше 1, я бы хотел дополнить его нулями, если его размер равен 8, а не 9 цифрам. Поэтому я написал следующий код:

<?xml version = '1.0' encoding = 'UTF-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<xsl:variable name="STRING_LENGTH">
      <xsl:text>1</xsl:text>
</xsl:variable>
<xsl:for-each select="current()[string-length(RandomNumber) >= $STRING_LENGTH]/RandomNumber">
    <xsl:element name="leftPNumber">
        <xsl:value-of select="format-number(current(), '000000000')"/>
    </xsl:element>
</xsl:for-each>
</xsl:stylesheet>

Для ввода:

<RandomNumbers>
    <RandomNumber>11223366</RandomNumber>
</RandomNumbers>

Предполагаемый вывод должен быть:

<leftPNumber>011223366</leftPNumber>

По какой-то причине это не работаеткак и предполагалось, но тоже не виноват. Он просто создает новый элемент с оригинальным номером, без добавления дополнительного «0». Это потому, что я использую current () внутри "format-number"? Если да, то какую альтернативу я могу использовать?

Приветствия,

Jesper

1 Ответ

1 голос
/ 08 октября 2019

Мой вопрос в основном о том, могу ли я использовать «current ()» внутри «format-number»

Да, вы можете - при условии, что ваш контекстный узел является узлом, содержащим значениеВы хотите отформатировать.

Например, задано:

XML

<RandomNumbers>
    <RandomNumber>5</RandomNumber>
    <RandomNumber>56</RandomNumber>
    <RandomNumber>567</RandomNumber>
</RandomNumbers>

следующей таблицы стилей:

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:template match="/RandomNumbers">
    <xsl:copy>
        <xsl:for-each select="RandomNumber">
            <leftPNumber>
                <xsl:value-of select="format-number(current(), '000000000')"/>
            </leftPNumber>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet> 

вернет:

Результат

<?xml version="1.0" encoding="UTF-8"?>
<RandomNumbers>
  <leftPNumber>000000005</leftPNumber>
  <leftPNumber>000000056</leftPNumber>
  <leftPNumber>000000567</leftPNumber>
</RandomNumbers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...