xml - postgres复杂的xml解析
问题描述
我有下面的xml,一个员工可以有几个reportees,每个reportees可以有几个reportess,但是层次结构最多可以有4个内部reportess。我需要这个 XML 的结果如下表所示。
我正在使用下面的 postgres 查询,我的计划是有 4 个 CTE,但是它失败并出现错误could not parse XML document
我在这里做错了什么。
<department>
<head>
<employee>emp 1</employee>
<cell col="2">M-y</cell>
<cell col="3">T-y</cell>
<cell col="4">W-n</cell>
<cell col="5">T-y</cell>
<cell col="6">F-n</cell>
<reportees level="1">
<employee>emp 11</employee>
<cell col="2">M-n</cell>
<cell col="3">T-n</cell>
<cell col="4">W-n</cell>
<cell col="5">T-y</cell>
<cell col="6">F-n</cell>
<reportees level="2">
<employee>emp 111</employee>
<cell col="2">M-n</cell>
<cell col="3">T-n</cell>
<cell col="4">W-n</cell>
<cell col="5">T-y</cell>
<cell col="6">F-n</cell>
</reportees>
<reportees level="2">
<employee>emp 10034</employee>
<cell col="2">M-n</cell>
<cell col="3">T-n</cell>
<cell col="4">W-n</cell>
<cell col="5">T-y</cell>
<cell col="6">F-n</cell>
</reportees>
</reportees>
<reportees level="1">
<employee>emp 12</employee>
<cell col="2">M-n</cell>
<cell col="3">T-n</cell>
<cell col="4">W-n</cell>
<cell col="5">T-y</cell>
<cell col="6">F-n</cell>
</reportees>
<reportees level="1">
<employee>emp 13</employee>
<cell col="2">M-n</cell>
<cell col="3">T-n</cell>
<cell col="4">W-n</cell>
<cell col="5">T-y</cell>
<cell col="6">F-n</cell>
<reportees level="2">
<employee>emp 131</employee>
<cell col="2">M-n</cell>
<cell col="3">T-n</cell>
<cell col="4">W-n</cell>
<cell col="5">T-y</cell>
<cell col="6">F-n</cell>
<reportees level="3">
<employee>emp 1311</employee>
<cell col="2">M-n</cell>
<cell col="3">T-n</cell>
<cell col="4">W-n</cell>
<cell col="5">T-y</cell>
<cell col="6">F-n</cell>
</reportees>
</reportees>
</reportees>
</head>
</department>
</company>
WITH CTE AS (
SELECT xmltable.*
FROM xmldata,
XMLTABLE('//company/department/head'
PASSING data COLUMNS
employee text PATH 'employee'
, monday text PATH 'cell[1]'
, tuesday text PATH 'cell[2]'
, wednesday text PATH 'cell[3]'
, thuresday text PATH 'cell[4]'
, friday text PATH 'cell[5]'
, reportees XML PATH 'reportees'))
SELECT *
FROM CTE
LEFT JOIN LATERAL XMLTABLE ('reportees' PASSING reportees COLUMNS
employee text PATH 'employee'
, monday text PATH 'cell[1]'
, tuesday text PATH 'cell[2]'
, wednesday text PATH 'cell[3]'
, thuresday text PATH 'cell[4]'
, friday text PATH 'cell[5]'
, reportees XML PATH 'reportees') ON TRUE;
<table border='1'>
<thead>
<tr>
<td>Employee</td>
<td>Monday</td>
<td>Tuesday</td>
<td>Wednesday</td>
<td>Thuresday</td>
<td>Friday</td>
<td>Employee_1</td>
<td>Monday_1</td>
<td>Tuesday_1</td>
<td>Wednesday_1</td>
<td>Thuresday_1</td>
<td>Friday_1</td>
<td>Employee_2</td>
<td>Monday_2</td>
<td>Tuesday_2</td>
<td>Wednesday_2</td>
<td>Thuresday_2</td>
<td>Friday_2</td>
<td>Employee_3</td>
<td>Monday_3</td>
<td>Tuesday_3</td>
<td>Wednesday_3</td>
<td>Thuresday_3</td>
<td>Friday_3</td>
</tr>
</thead>
<tbody>
<tr>
<td>emp 1</td>
<td>M-y</td>
<td>T-y</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td>emp 11</td>
<td>M-n</td>
<td>T-n</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td>emp 111</td>
<td>M-n</td>
<td>T-n</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>emp 1</td>
<td>M-y</td>
<td>T-y</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td>emp 11</td>
<td>M-n</td>
<td>T-n</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td>emp 10034</td>
<td>M-n</td>
<td>T-n</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>emp 1</td>
<td>M-y</td>
<td>T-y</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td>emp 12</td>
<td>M-n</td>
<td>T-n</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>emp 1</td>
<td>M-y</td>
<td>T-y</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td>emp 13</td>
<td>M-n</td>
<td>T-n</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td>emp 131</td>
<td>M-n</td>
<td>T-n</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
<td>emp 1311</td>
<td>M-n</td>
<td>T-n</td>
<td>W-n</td>
<td>T-y</td>
<td>F-n</td>
</tr>
</tbody>
</table>
解决方案
xml 树<company>
在开头缺少标记。
最好的问候,
Bjarni
推荐阅读
- c# - Rider 建议使用 C# 8 语法,但未能构建解决方案
- python - 我正在构建一个集成深度学习模型,它需要两个输入,当我连接它时会出错
- kubernetes - Kubernetes PVC 共享一个 PV?
- linux - obj-m是什么意思:在Linux设备驱动Makefile中
- php - 如何在excel中导出表格数据以及图像缩略图
- jasper-reports - 如何在碧玉报告中使用字体真棒图标?
- php - 身份验证类不适用于 Laravel 中的 Traits
- unity3d - 如果没有额外的参考对象,反向运动学是否可行?
- node.js - 如何在 nodejs 10.x 中使用 TLSv1.3
- if-statement - if(index(i,$12)==1 表示什么