繁体   English   中英

Oracle SUBSTR XML解析

[英]Oracle SUBSTR XML Parse

表中的某些值具有不同的XML结构。

所有XML块中都存在一个标记<problemDesc> 'error' </problemDesc>

如何使用SubStr和InStr函数从标记中提取错误? 还是有任何获取价值的方法。

使用字符串函数解析XML不是一个好主意。 改用内置的XML解析功能:

SqlFiddleDemo

select *  
FROM 
     XMLTABLE('//problemDesc'  
         PASSING   
            xmltype('<problemDesc>error</problemDesc>')
         COLUMNS  
            error  varchar2 (200) PATH '.'  
     ) xmlt  
;

尽管我同意这是一个坏主意,但以您可能会这样的方式回答问题是可行的:

SELECT SUBSTR('<problemDesc>Error 1</problemDesc>', 
  INSTR('<problemDesc>Error 1</problemDesc>', '<problemDesc>') + LENGTH('<problemDesc>'), 
  INSTR('<problemDesc>Error 1</problemDesc>', '</problemDesc>') - (INSTR('<problemDesc>Error 1</problemDesc>', '<problemDesc>') + LENGTH('<problemDesc>')))
FROM DUAL;

换一种说法

SELECT SUBSTR(COL_NAME, 
  INSTR(COL_NAME, '<problemDesc>') + LENGTH('<problemDesc>'), 
  INSTR(COL_NAME, '</problemDesc>') - (INSTR(COL_NAME, '<problemDesc>') + LENGTH('<problemDesc>')))
FROM SOME_TABLE;

只要这些标记不出现多次,此方法就起作用。 但是,从理论上讲,您正在寻找START标记的开始,并且想要转到END标记的开始。

为什么要字符串操作? 尝试这个 :

SQL> select extractvalue(xmltype('<a>abhi</a>'),'//a/text()') from dual;

EXTRACTVALUE(XMLTYPE('<A>ABHI<
--------------------------------------------------------------------------------
abhi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM