首先,我有以下xml:
<?xml version="1.0" encoding="UTF-8"?>
<control-sygnatura>XTW/GAT/GTW/1/00007</control-sygnatura>
<control-inst>Firma 1</control-inst>
<section-uczestnicy fr:section-status="changed">
<section-uczestnicy-iteration>
<section-uczestnik>
<section-dane-uczestnika>
<control-imie>Piotr</control-imie>
<control-nazwisko>Pawel</control-nazwisko>
</section-dane-uczestnika>
</section-uczestnik>
</section-uczestnicy-iteration>
<section-uczestnicy-iteration>
<section-uczestnik>
<section-dane-uczestnika>
<control-imie>Izabella</control-imie>
<control-nazwisko>Agata</control-nazwisko>
</section-dane-uczestnika>
</section-uczestnik>
</section-uczestnicy-iteration>
</section-uczestnicy>
</xml>
我需要從此 xml 創建視圖,其中包含 4 列 control-sygnatura、control-inst、control-imie 和 control-nazwisko。
我寫了以下 postgresql 腳本:
CREATE OR REPLACE VIEW public.exportSL
AS SELECT
btrim(xpath('//control-sygnatura/text()'::text, ofd.xml)::text, '{}'::text) AS control-sygnatura,
btrim(xpath('//control-inst/text()'::text, ofd.xml)::text, '{}'::text) AS control-inst,
btrim(xpath('//control-imie/text()'::text, ofd.xml)::text, '{}'::text) AS control-imie,
btrim(xpath('//control-nazwisko/text()'::text, ofd.xml)::text, '{}'::text) AS control-nazwisko,
FROM orbeon_form_data ofd
但問題是我的觀點有記錄
control-sygnatura control-inst control-imie control-nazwisko
___________________________________________________________________________
XTW/GAT/GTW/1/00007 Firma 1 Piotr, Izabela Pawel, Agata
XTW/GAT/GTW/1/00007 Firma 1 Piotr, Izabela Pawel, Agata
而不是(一個記錄中的一個人)
control-sygnatura control-inst control-imie control-nazwisko
___________________________________________________________________________
XTW/GAT/GTW/1/00007 Firma 1 Piotr Pawel
XTW/GAT/GTW/1/00007 Firma 1 Izabela Agata
你知道如何在 postgres 中做到這一點嗎?
uj5u.com熱心網友回復:
使用XMLTABLE。請注意,您的 xml 無效(缺少根標記)并且fr:未定義命名空間。我添加了<xml>根標簽并洗掉了fr:. orbeon_form_data只有一列的 CTE 模擬了您的實際表格。
with orbeon_form_data(xmlf) as
(
values
(
'<?xml version="1.0" encoding="UTF-8"?>
<xml>
<control-sygnatura>XTW/GAT/GTW/1/00007</control-sygnatura>
<control-inst>Firma 1</control-inst>
<section-uczestnicy section-status="changed">
<section-uczestnicy-iteration>
<section-uczestnik>
<section-dane-uczestnika>
<control-imie>Piotr</control-imie>
<control-nazwisko>Pawel</control-nazwisko>
</section-dane-uczestnika>
</section-uczestnik>
</section-uczestnicy-iteration>
<section-uczestnicy-iteration>
<section-uczestnik>
<section-dane-uczestnika>
<control-imie>Izabella</control-imie>
<control-nazwisko>Agata</control-nazwisko>
</section-dane-uczestnika>
</section-uczestnik>
</section-uczestnicy-iteration>
</section-uczestnicy>
</xml>'::xml
)
)
select xmlt.*
from orbeon_form_data
cross join lateral
XMLTABLE
(
'/xml/section-uczestnicy/section-uczestnicy-iteration/section-uczestnik/section-dane-uczestnika'
PASSING by ref xmlf
COLUMNS
"control-sygnatura" text path '/xml/control-sygnatura',
"control-inst" text path '/xml/control-inst',
"control-imie" text PATH 'control-imie',
"control-nazwisko" text PATH 'control-nazwisko'
) xmlt;
| 控制-sygnatura | 控制裝置 | 控制型 | 控制-nazwisko |
|---|---|---|---|
| XTW/GAT/GTW/1/00007 | 菲爾馬 1 | 彼得 | 帕維爾 |
| XTW/GAT/GTW/1/00007 | 菲爾馬 1 | 伊莎貝拉 | 阿加塔 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/521268.html
上一篇:XPath選擇沒有子元素的元素?
