Преобразование научной записи в двойную с помощью XSLT (FO) - PullRequest
1 голос
/ 26 февраля 2010

XML, который я хотел бы преобразовать, содержит что-то вроде 7.3248378E7, которое изначально не поддерживается процессором XSL-FO (заканчивается в NaN в файле PDF). Есть ли хороший способ (противоположный грязному хаку) преобразовать этот числовой формат?

Большое спасибо.

Ответы [ 3 ]

1 голос
/ 27 февраля 2010

Я нашел этот пост: Преобразование XSL для преобразования из научной записи в десятичное число , которое предоставляет таблицу стилей XSLT 1.0.

После включения / импорта таблицы стилей вызовите шаблон convertSciToNumString для преобразования:

<xsl:call-template name="convertSciToNumString">
    <xsl:with-param name="myval" select="'7.3248378E7'"/>
</xsl:call-template>

Производит: 73248378

Это может быть оценено как число и должно обойти вашу проблему с NaN:

<xsl:variable name="num">
    <xsl:call-template name="convertSciToNumString">
      <xsl:with-param name="myval" select="'7.3248378E7'"/>
    </xsl:call-template>
</xsl:variable>

<xsl:value-of select="$num"/> + 1 = <xsl:value-of select="$num + 1" />

Производит: 73248378 + 1 = 73248379

0 голосов
/ 20 апреля 2010

Сегодня мне пришлось решить аналогичную проблему с научным преобразованием. Наконец, мне пришлось написать свой собственный шаблон преобразования XSLT, потому что оригинальная "convertSciToNumString" от Michael Case, упомянутая здесь в каком-то другом ответе, имеет некоторые ошибки.

Вот статья об этой реализации и тестах конверсии. http://www.orm -designer.com / статей / XSLT-преобразование, научно-нотация к десятичному-номеру

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

Является ли элемент обозначенным xs: float или xs: double, в отличие от xs: decimal? Если это не сработает, то я думаю, что вам придется придерживаться подхода «грязного хака». См. «Требование 29» на странице XSLT .

...