【发布时间】:2011-04-20 19:28:09
【问题描述】:
我有一些表示数学表达式树的 XML 数据,并希望将其转换为平面数学公式。听起来很简单,但 SQL Server 中的 XQuery 限制目前阻止了我成功(没有递归函数、“异构”结果的问题等)。
表达式可以是任意嵌套深度。这是一个示例(数据稍后会在表格的 xml 列中,但这足以在这里进行测试):
DECLARE @expr xml;
SET @expr = '<expression aggregator="+">
<indicator>122F277B-A241-7944-BC38-3BB5E8B213AF</indicator>
<indicator>7DD46849-2193-EB41-8BAB-CE0C45255249</indicator>
<expression aggregator="*">
<expression aggregator="/">
<indicator>122F277B-A241-7944-BC38-3BB5E8B213AF</indicator>
<indicator>27F3156D-FDA7-1E44-B545-7F27A48D9838</indicator>
</expression>
<indicator>ADFCEF34-9877-DE4E-8A00-13576437D82B</indicator>
<value>12</value>
</expression>
<expression aggregator="-">
<indicator>ADFCEF34-9877-DE4E-8A00-13576437D82B</indicator>
<indicator>75896474-C197-1C44-8EAA-8FE9D0AB2663</indicator>
</expression>
<indicator>27F3156D-FDA7-1E44-B545-7F27A48D9838</indicator>
</expression>';
所需的结果是(空格无关紧要):
(
[122F277B-A241-7944-BC38-3BB5E8B213AF] +
[7DD46849-2193-EB41-8BAB-CE0C45255249] +
(
(
[122F277B-A241-7944-BC38-3BB5E8B213AF] /
[27F3156D-FDA7-1E44-B545-7F27A48D9838]
) *
[ADFCEF34-9877-DE4E-8A00-13576437D82B] *
12
) +
(
[ADFCEF34-9877-DE4E-8A00-13576437D82B] -
[75896474-C197-1C44-8EAA-8FE9D0AB2663]
) +
[27F3156D-FDA7-1E44-B545-7F27A48D9838]
)
是否有人掌握 SQL Server 2008 (R2) 中的 XQuery 足以执行此转换?
【问题讨论】:
-
如果没有一般递归,您将无法处理具有未定义 deph 的树。这就是为什么这个 XQuery 引擎有自己的标签...
-
@Alejandro,抱歉没有看到这个标签,感谢编辑。
标签: sql-server xml sql-server-2008 recursive-query xquery-sql