У меня есть XML-данные, представляющие собой математическое дерево выражений, и вы хотите преобразовать это в формулу с плоской математикой. Звучит просто, но ограничения XQuery в SQL Server в настоящее время мешают мне добиться успеха (нет рекурсивных функций, проблем с «неоднородными» результатами и т. Д.).Преобразование дерева XML в плоский текст с использованием SQL Server 2008 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]
)
Является ли кто-то мастером XQuery в SQL Server 2008 (R2) достаточно хорошо, чтобы выполнить это преобразование?
Вы не можете обработать дерево с неопределенным deph без общей рекурсии. Вот почему этот движок XQuery имеет свой собственный тег ... –
@Alejandro, извините, не поймал этот тег, спасибо за редактирование. – Lucero