如何解决我如何从 xml
感谢点击,
-
我需要 CDATA 中的值
-
如果我想找一个叫玛丽亚,生日是2012-03-12的人 我如何找到它??
SELECT t.doc.extract('/RESPONSE/INFO/STU_NAME/text()').getStringVal()
"stu"
FROM table t
WHERE t.doc.extract('/RESPONSE/INFO/STU_NAME/text()').getStringVal()
LIKE '%M%'
我试过了, 但你看到下面是结果
我不需要
// XML
<STUDENT>
<INFO>
<STU_NAME><![CDATA[ Maria ]]></STU_NAME>
<STU_WARN><![CDATA[ one ]]></STU_WARN>
<BIRTHDAY><![CDATA[ 2012-03-12 ]]></BRITHDAY>
</INFO>
<INFO>
<STU_NAME><![CDATA[ Kevin) ]]></STU_NAME>
<STU_WARN><![CDATA[ one ]]></STU_WARN>
<BIRTHDAY><![CDATA[ 2010-07-15 ]]></BRITHDAY>
</INFO>
解决方法
提取功能已被弃用很长时间(至少从 11gR2 起 - 请参阅该文档中的注释)。
如果您有多个值并且可能想要查看多个值,您可以使用 XMLTable,它可以消除 CDATA 噪音(但可能需要修剪,因为您的值中有空格):
const exerciseRunning = useRef(true);
const directionForward = useRef(true);
const [progress,setProgress] = useState(0);
const [coord1,setCoord1] = useState({x: 0,y: 0});
const [coord2,setCoord2] = useState({x: 0,y: 0});
const [percentage,setPercentage] = useState(1);
useAnimationFrame((deltaTime) => {
// Works!
if (!exerciseRunning.current) {
return;
}
// setProgress works!
// directon.Forward works!
// percentage does not work!
setProgress((prevState) =>
directionForward.current
? prevState + percentage * 1
: prevState - percentage * 2
);
},[percentage]
);
select x.stu_name,x.birthday,trim(stu_name) as stu_name2,to_char(x.birthday,'YYYY-MM-DD') as birthday2
from your_table t
cross join xmltable ('/RESPONSE/INFO' passing t.doc
columns
stu_name varchar2(30) path 'STU_NAME',birthday date path 'BIRTHDAY'
) x
where x.stu_name like '%M%'
如果您的目标是单个值,您还可以使用 xmlquery,它更接近您的提取:
STU_NAME BIRTHDAY STU_NAME2 BIRTHDAY2
-------- --------- --------- ---------
Maria 12-MAR-12 Maria 2012-03-12
select regexp_replace(
xmlquery('/RESPONSE/INFO[contains(BIRTHDAY,"2012-03-12")]/STU_NAME/text()'
passing doc
returning content),'<!\[CDATA\[ *(.*?) *\]\]>','\1') as stu_name
from your_table t
这是我在节点中查找您想要的生日作为文本,并获得匹配的名称;但由于它仍然具有 CDATA,它与您拥有的大致相同。所以,我使用了一个正则表达式来去除 CDATA 部分,不过如果你关心性能,你也可以使用 substr/instr。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。