Oracle SUBSTR XML 解析
Posted
技术标签:
【中文标题】Oracle SUBSTR XML 解析【英文标题】:Oracle SUBSTR XML Parse 【发布时间】:2015-09-20 08:02:38 【问题描述】:我在表中有某些具有不同 XML 结构的值。
有一个标签<problemDesc> 'error' </problemDesc>
它存在于所有 XML 块中。
如何使用 SubStr 和 InStr 函数从标签中提取错误?或者有没有办法获得价值。
【问题讨论】:
【参考方案1】:使用字符串函数解析 XML 不是一个好主意。改用内置的 XML 解析功能:
SqlFiddleDemo
select *
FROM
XMLTABLE('//problemDesc'
PASSING
xmltype('<problemDesc>error</problemDesc>')
COLUMNS
error varchar2 (200) PATH '.'
) xmlt
;
【讨论】:
【参考方案2】:虽然我同意这是一个坏主意,但以您提出的类似问题的方式回答问题是可行的:
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 标签的开头。
【讨论】:
【参考方案3】:为什么要进行字符串操作?? 试试这个:
SQL> select extractvalue(xmltype('<a>abhi</a>'),'//a/text()') from dual;
EXTRACTVALUE(XMLTYPE('<A>ABHI<
--------------------------------------------------------------------------------
abhi
【讨论】:
以上是关于Oracle SUBSTR XML 解析的主要内容,如果未能解决你的问题,请参考以下文章