Oracle XMLQUERY-删除根目录下的所有空节点

时间:2018-12-14 11:39:41

标签: xml oracle

我有一个查询:

  SELECT  DELETEXML(xmltype('<docGetResponse>
                            <histories>
                              <history>
                                <history/>
                              </history>
                            </histories>
                            <validations/>
                          </docGetResponse>'), '/docGetResponse/*[not(node())]')

  FROM    dual;

我的目标是删除docGetResponse下的所有EMPTY节点。在这种情况下,应该从上面保留xml

<docGetResponse></docGetResponse> 

OR

<docGetResponse/>

但是查询给我错误: ORA-21500:内部错误代码,参数:[%s],[%s],[%s],[%s],[%s],[%s],[%s],[%s] < / p>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

1)您有一些内部错误。
2)DELETEXML是已弃用的sql函数,应使用xmlquery替换它。
3)xquery的正确版本为'/docGetResponse/*[not(.//text())]'

  select xmlquery('copy $doc := . 
                modify delete nodes $doc/docGetResponse/*[not(.//text())] 
                return $doc' 
         passing xmltype('<docGetResponse>
                            <histories>
                              <history>
                                <history/>
                              </history>
                            </histories>
                            <validations/>                            
                            <xxx>
                              <a><b><c>av</c></b></a>
                            </xxx>
                          </docGetResponse>') returning content) from  dual;