XSLT: обработка числовых значений, использующих обозначение экспоненты - PullRequest
1 голос
/ 23 февраля 2010

Мы должны преобразовать некоторый XML, который содержит числа в экспоненциальной (так называемой научной) нотации например.

    <Value>12.34e12</Value>
    <Value>-12.34e-12</Value>

довольно раздражающе, мы не можем использовать функцию sum () и тому подобное, потому что синтаксический анализатор XSLT ожидает, что числа будут в десятичном формате.

[Мы используем класс .Net XslCompiledTransform для выполнения преобразования, но я думаю, что эта проблема является общей для всех реализаций XSLT]

Единственное решение этой проблемы, которое у нас есть, - преобразовать строковое значение в число с помощью функции javascript (см. Ниже), а затем написать собственный шаблон суммы, который вызывает эту функцию.

Мне кажется, что должен быть лучший путь - есть?

/*
 This function attempts to coerce the input into a number. 
*/
function toNumber( x ) {
 if(!x) {
  return Number.NaN;
 }
 if(typeof x === 'number') {
  return x;
 }
 return parseFloat(x);
};

1 Ответ

0 голосов
/ 23 февраля 2010

Saxon-B 9.0.0.6 отлично работает здесь. Выходы 0.

РЕДАКТИРОВАТЬ: Теперь я вижу, что Saxon 6 (процессор только для xslt 1.0) возвращает NaN. Но если вы попробуете xslt 2.0, вам больше ничего не понадобится. : -)

XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <Value>12.34e12</Value>
    <Value>-12.34e12</Value>
</root>

XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="root">
    <xsl:value-of select="sum(Value)"/>
</xsl:template>
</xsl:stylesheet>
...