2016-12-19 5 views
1

Как я знаю, для расширенных вычислений нет возможности использовать функцию XSLT, у кого есть представление, как я могу делать математику, такую ​​как Cosine/Sin() в XSLT? Требование также очень специфично, что мне нужно, чтобы расширение было загружаемым (вместо указания на URL), чтобы я мог его загрузить и ссылаться как источник в моем сценарии XSL. Я не могу загрузить исходные файлы EXSLT, чтобы попытаться, поскольку кажется, что есть проблема с этой страницей. Пожалуйста, вы можете также предоставить простой пример того, как ссылаться на источник в сценарии и вычислить что-то простое, как:XSLT 2.0 Продвинутый расчет включает Cos() Sin()

<input> 
<num1>1</num1> 
<num2>1</num2> 
</input> 

и имеют выход как:

<output> 
<cosOfnum1>0.54030230586</cosOfnum1> 
<sinOfnum2>0.8414709848</sinOfnum2> 
</output> 

Спасибо!

+1

Ваш вопрос помеченных как '' libxslt' и XSLT 2.0', что делает не имеет смысла. Если вы используете 'libxslt', у вас уже есть поддержка функций EXCLT' math: sin() 'и' math: cos() 'без необходимости загружать или ссылаться на что-либо. Другой процессор может поддерживать свои собственные расширения. С любым процессором вы можете использовать метод [серия Тейлора] (http://mathworld.wolfram.com/TaylorSeries.html). –

+1

Вы должны сообщить нам, какой процессор XSLT вы используете, и в какой среде. –

+0

Извините, michael.hor257k, я удалил этот тег. –

ответ

1

Saxon 9 (в том числе и он, протестирована с 9.6 см и http://saxonica.com/html/documentation9.6/functions/math/sin.html говоря «Из Saxon 9.6 доступны во всех выпусках») не имеет из поддержки коробки для функций, определенных в https://www.w3.org/2005/xpath-functions/math/, вот пример:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:math="http://www.w3.org/2005/xpath-functions/math" 
    exclude-result-prefixes="xs math" 
    version="2.0"> 

    <xsl:template match="input"> 
     <output> 
      <xsl:apply-templates/> 
     </output> 
    </xsl:template> 

    <xsl:template match="num1"> 
     <cosOfnum1> 
      <xsl:value-of select="math:cos(.)"/> 
     </cosOfnum1> 
    </xsl:template> 

    <xsl:template match="num2"> 
     <sinOfnum2> 
      <xsl:value-of select="math:sin(.)"/> 
     </sinOfnum2> 
    </xsl:template> 

</xsl:stylesheet> 

Я также протестировали, что XmlPrime 4 работает выше таблицы стилей корректно при использовании опции командной строки --xt30 так же имеет встроенную поддержку этих функций.

Altova XMLSpy 2017 также поддерживает функции в пространстве имен xmlns:math="http://www.w3.org/2005/xpath-functions/math" из коробки, но только в таблицах стилей version="3.0".

1

Как я знаю, что нет из функции XSLT коробки для продвинутых расчета, кто имеет какие-либо идеи, как я могу сделать математику, такую ​​как Cosine/Sin() в XSLT?

Использование библиотеки FXSL, один может иметь среди прочего тригонометрические функции, написанные на чистом XSLT 1.0 или XSLT 2.0:

http://fxsl.sourceforge.net/articles/xslCalculator/The%20FXSL%20Calculator.html#The_Trigonometric_Functions

Математика модули FXSL реализации:

  1. Известные тригонометрические функции: sin(), cos(), tan(), cot(), sec(), csc()
  2. гиперболические тригонометрические функции: hsin(), hcos(), htan(), hcot(), hsec(), hcsc()
  3. Показательные и логарифмические функции: exp(), ln(), log10(), log2(), log(), pow(), sqrt()
  4. Решение уравнений одного реального переменного: Newton - Raphson's meth od и Двоичный поиск метод.
  5. Обратные функции: arcsin(), arccos(), arctan(), arccot(), arcsec(), arccsc(), archsin(), archcos(), archtan(), archcot(), archsec(), archcsc(),
Смежные вопросы