2013-11-08 2 views
2

У меня есть вход, как 00000BE0891.116.828. Я должен удалить из него точки и ведущие нули. Я попытался использовать функцию translate(), которая удаляла точки из нее.Удаление ведущих нулей из буквенно-цифрового символа в XSL1.0?

Затем я попробовал string(number(00000BE0891.116.828)), но он вернул NaN, потому что функция number() не подтверждает алфавиты. У кого-нибудь есть предложения?

ответ

6

Одним из подходов может быть использование перевода для удаления всех нулей, которое затем скажет вам, что такое первый ненулевой символ. Затем вы можете использовать подстроку после, чтобы таким образом отрубить начальные нули.

<xsl:variable name="firstNonZero" 
       select="substring(translate($number, '0', ''), 1, 1)" /> 
<xsl:variable name="noLeadingZeroes" 
       select="concat($firstNonZero, substring-after($number, $firstNonZero))" /> 
<xsl:value-of select="translate($noLeadingZeroes, '.', '')" /> 

(Где $ Номер является отправной вход "00000BE0891.116.828")

Или, если вы хотите, чтобы объединить это в одно выражение ...

<xsl:value-of 
    select="translate(concat(substring(translate($number, '0', ''), 1, 1), substring-after($number, substring(translate($number, '0', ''), 1, 1))), '.', '')" /> 
+0

Спасибо, это сработало хорошо. – Kundan

+0

'translate ($ number, '^ 0 *', '')' было бы легче написать –

+0

К сожалению, в XLST 1.0 нет регулярных выражений. (В XSLT 2.0 функция 'replace' может использовать регулярные выражения. Я думаю, что' translate' только когда-либо принимает простую строку в качестве аргумента). –

0

Вы можете также используйте translate() для удаления ведущих нулей из буквенно-цифрового значения. Например, если у вас есть XML, как это:

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
    <value>00000BE0891.116.828</value> 
</data> 

Вы могли бы использовать XSLT, как это:

<?xml version="1.0" encoding="UTF-8"?> 
<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="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="value"> 
     <xsl:copy> 
      <xsl:value-of select="translate(., '^0*', '')" /> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

^0* является регулярным выражением, и удалит все ведущие нули. Если вы хотите совместить с перестройкой точки, вы можете сделать это:

<xsl:value-of select="translate(translate(., '^0*', ''), '.', '')" /> 
Смежные вопросы