Oracle 11g中使用EXTRACTVALUE提取XML自闭合标签属性值返回空结果的技术求助
解决Oracle 11g中EXTRACTVALUE提取XML属性返回空的问题
嘿,我完全懂你碰到的这个坑!问题出在你对XPath的用法上——你要提取的taskCode不是节点的文本内容,而是节点的属性,原来的XPath路径没指定要取属性,所以返回空是正常的。
为什么原来的代码不行?
你的XML里<taskCode taskCode="204-1"/>是自闭合标签,taskCode="204-1"是这个节点的属性,不是节点内部的文本值。而你写的/templatesLists/templates/taskCode是在找这个节点的文本内容,自然就返回空了。
修正后的代码
只需要在XPath里加上@符号来指定要提取的属性,修改后的PL/SQL代码如下:
SELECT EXTRACTVALUE(XMLType(v_XML_TEST), '/templatesLists/templates/taskCode/@taskCode') INTO v_RESULT FROM DUAL; DBMS_OUTPUT.PUT_LINE (v_RESULT); -- 现在会输出"204-1"
额外建议:替代废弃的EXTRACTVALUE
顺便提一句,EXTRACTVALUE在Oracle 12c之后已经被官方标记为废弃了,如果你以后升级版本或者想写更规范的代码,推荐用XMLQUERY或者XMLTABLE。比如用XMLQUERY的写法:
SELECT XMLQUERY('/templatesLists/templates/taskCode/@taskCode' PASSING XMLType(v_XML_TEST) RETURNING CONTENT).getStringVal() INTO v_RESULT FROM DUAL;
这样不仅能解决当前问题,也能避免以后版本兼容性的问题。
内容的提问来源于stack exchange,提问作者mmuss
相关产品推荐
相关产品推荐

