我试图从存储为Oracle db表中NCLOB列的XML数据中提取值。
xml结构
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://example.com/FAS/DOC/2011/v3.0b" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<record xmlns="http://example.com/FAS/DOC/2011/v3.0b">
<pdate xmlns="http://example.com/FAS/DOC/2011/v3.0b">2014-05-15</pdate>
</record>
</root>
询问
select EXTRACTVALUE(XMLTYPE(nclob_column),'/root/record/pdate','xmlns="http://example.com/FAS/DOC/2011/v3.0b"') pdate1,
EXTRACTVALUE(XMLTYPE(nclob_column),'/root/record/pdate') pdate2
from nclob_table
问题
在
pdate1
不返回值,而是pdate2
返回null。我不能使用EXTRACTVALUE()的第三个参数来指定xmlns属性值,因为该值在每行/每条记录上都会改变。因此,我得到了一行的值,但其他所有行都为空。
如何在不指定属性的情况下提取值?
谢谢。
如果可以保证在这种情况下名称空间对于选择元素来说无关紧要,则可以local-name()
仅通过元素的本地名称来匹配元素,而忽略名称空间:
select EXTRACTVALUE(
XMLTYPE(nclob_column),
'/*[local-name()="root"]/*[local-name()="record"]/*[local-name()="pdate"]'
) pdate
from nclob_table
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句