我正在尝试按如下方式执行选择查询,其中我将一个小的xml作为xmltype传递。
SELECT x.PO_STEP,x.INSTL_ID,X.INSTL_LOC_CODE from xmltable
(
XMLNAMESPACES('namespace1' as "v20", 'namespace2' as "v201"),
'/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails/*[text()]'
PASSING xmltype(' <v20:ProductionOrder xmlns="***something***" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v20="namespace1">
<v201:ProductionOrderSteps xmlns:v201="namespace2">
<v201:ProductionOrderStep>
<v201:POStepDetails>
<v201:PO_STEP>1L</v201:PO_STEP>
<v201:InstallationDetails>
<v201:INSTL_ID>032</v201:INSTL_ID>
<v201:INSTL_LOC_CODE>N</v201:INSTL_LOC_CODE>
</v201:InstallationDetails>
<v201:InstallationDetails>
<v201:INSTL_ID>000</v201:INSTL_ID>
<v201:INSTL_LOC_CODE />
</v201:InstallationDetails>
<v201:InstallationDetails>
<v201:INSTL_ID>000</v201:INSTL_ID>
<v201:INSTL_LOC_CODE />
</v201:InstallationDetails>
<v201:InstallationDetails>
<v201:INSTL_ID>000</v201:INSTL_ID>
<v201:INSTL_LOC_CODE />
</v201:InstallationDetails>
</v201:POStepDetails>
</v201:ProductionOrderStep>
<v201:ProductionOrderStep>
<v201:POStepDetails>
<v201:PO_STEP>1B</v201:PO_STEP>
<v201:InstallationDetails>
<v201:INSTL_ID>001</v201:INSTL_ID>
<v201:INSTL_LOC_CODE>N</v201:INSTL_LOC_CODE>
</v201:InstallationDetails>
<v201:InstallationDetails>
<v201:INSTL_ID>000</v201:INSTL_ID>
<v201:INSTL_LOC_CODE />
</v201:InstallationDetails>
<v201:InstallationDetails>
<v201:INSTL_ID>000</v201:INSTL_ID>
<v201:INSTL_LOC_CODE />
</v201:InstallationDetails>
</v201:POStepDetails>
</v201:ProductionOrderStep>
</v201:ProductionOrderSteps>
</v20:ProductionOrder>')
COLUMNS
PO_STEP VARCHAR2(20) PATH './parent::*/parent::*/v201:PO_STEP',
INSTL_ID VARCHAR2(30) PATH '//v201:INSTL_ID',
INSTL_LOC_CODE VARCHAR2(30) PATH '//v201:INSTL_LOC_CODE'
)x
但我得到以下结果
PO_STEP INSTL_ID INSTL_LOC_CODE
1L null null
1L null null
1L null null
1L null null
1L null null
1B null null
1B null null
1B null null
1B null null
我无法理解Xpath的问题,xpath是否与列错误地传递或者写在顶部的xpath是错误的。 我正在使用oracle sql developer
答案 0 :(得分:0)
更改xpath
/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails/*[text()]
到
/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails
要获得第一次出现,最后添加[1]
,如:
/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails[1]
和
更改
./parent::*/parent::*/v201:PO_STEP
到
./parent::*/v201:PO_STEP
结果将是:
1L 032 N
1L 000
1L 000
1L 000
1B 001 N
1B 000
1B 000
仅对第一次出现,结果为:
1L 032 N
1B 001 N