【发布时间】:2015-08-12 05:23:42
【问题描述】:
我需要用 xml 和 xslt 编写一个符号派生器。所以我在 xml 中创建了一个数学函数树,xslt 必须派生函数的每个表达式。例如:“y = 2x^2 + 3x^5” 所以“dy/dx= (2*2)x^(2-1) + (3*5)^(5-1) = 4x + 15x^4 " 和 xml 会是这样的:
<function>
<expression>
<coefficient>2</coefficient>
<variable>x</variable>
<exponent>2</exponent>
<sign>+</sign> <!-- Sign operating with the next expression (+,-,x,/) -->
</expression>
<expression>
<coefficient>3</coefficient>
<variable>x</variable>
<exponent>5</exponent>
<sign></sign>
</expression>
</function>
我遇到的问题是我想在 xslt 中声明一个变量 i 所以当 expression[i]/sign="+" 它执行链式规则并且 i=i+1 所以它转到下一个表达式时,我可以用for-each 做到这一点,但是当表达式[i]/sign="x" 我需要执行乘积规则并跳转两步所以 i=i+2,因为如果 i=3 那么“表达式[3] x 表达式[4]”,所以我不想再推导表达式[4]。那么我怎么能用 xslt 做到这一点,因为我不能修改变量的值呢?如果我想表达 4x^3(5x^2+2x^7) 那么我必须改变我的 xml 结构,怎么可能是 xslt 代码?
【问题讨论】:
-
为什么第二个
sign元素是空的?那是一个错误吗?还是隐含默认值? -
我让第二个符号元素为空,因为接下来它不是任何其他表达式,如果有第三个表达式,我将不得不编写一个与第三个表达式一起操作的符号。我需要使用 xslt 1.0 但有什么区别?你能解释一下你的 xslt 代码吗?
-
xsl:for-each-group 仅适用于 XSLT 2.0 或 3.0。考虑升级您的 XSLT 引擎。上下文是什么?这是用于 Web 还是 .NET 还是什么?
-
谢谢,您推荐我使用什么程序来使用 XSLT 2.0 或 3.0?好吧,这只是一个学校练习,我使用w3schools.com编辑器所以我认为它只支持1.0
-
请注意 StackOverflow 关于作业的政策:
Questions asking for homework help must include a summary of the work you've done so far to solve the problem, and a description of the difficulty you are having solving it.
标签: xml xslt data-driven