我试图按照以下方式执行一个select查询,其中我将一个小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。
发布于 2016-10-27 14:59:30
更改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 Nhttps://stackoverflow.com/questions/40287220
复制相似问题