oracle PL/SQL解析xml
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle PL/SQL解析xml相关的知识,希望对你有一定的参考价值。
oracle PL/SQL解析xml xmldom 在获取 DOM对象某个节点的值的时候 xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 )));
xmldom.item( chilNodes, 4 ) 已经精确到 chilNodes 第4个子节点 在获取第4个子节点内容的时候 为什么 先获取getFirstChild 。 getFirstChild 这个方法返回的到底是什么东西
<ppp>
qqqqq
</ppp>
<ppp>假如是你的(xmldom.item( chilNodes, 4 ) 他的子就是qqqqq 参考技术A 获取第一个孩子结点啊
如何在 PL/SQL 中解析 XML
【中文标题】如何在 PL/SQL 中解析 XML【英文标题】:How to parse XML in PL/SQL 【发布时间】:2012-12-25 12:49:36 【问题描述】:我在 pl/sql 中有以下 xml 结构:
<struct>
<member>
<name>CODE</name>
<value>
<integer>0</integer>
</value>
</member>
<member>
<name>MSG</name>
<value>
<string>Some message</string>
</value>
</member>
</struct>
如何使用名称标签中的文本提取路径 /member/value/some_type 中的值? 我的意思是这样的:
extract('//member/value/*[filter name tag = CODE]').getStringValue
【问题讨论】:
【参考方案1】:您可以使用local-name()
实现此目的
XPath 应该是,
//member/value/*[local-name()='CODE']
示例:
//member/value/*[local-name()='integer']
//member/value/*[local-name()='string']
结果:
-
0
一些消息
更新:
在这种情况下,您的 XPath 应该是
//member[*='CODE']/*/*
//member[*='MSG']/*/*
结果:
-
0
一些消息
【讨论】:
使用您的示例,我只能过滤整数/字符串等。但我需要使用//成员/名称值进行过滤 @DigitalGod:更新了答案。 现在我得到了正确的过滤器,但错误的值 -//member[*='CODE']/*/*/text()
【参考方案2】:
简短的回答是您不会将数据库视为 ETL(提取、转换、加载)工具。您要做的是将此 XML 文件传递给使用 XPath 的单独程序并以这种方式处理它。数据库只应该存储数据。事实上,在过去的 5 个月里,我一直在删除像这样的“异国情调”代码,这些代码使得 Oracle 数据库需要 72 多个小时才能插入 40 万行。所以再次将其偏移到 xpath
查询看起来与上面的命令几乎相同
【讨论】:
目前情况下,我只能使用存储过程。以上是关于oracle PL/SQL解析xml的主要内容,如果未能解决你的问题,请参考以下文章
pl/sql developer 登陆时 出现"ORA-12154: TNS:无法解析指定的连接标 ”!我在cmd里就能连接上。
使用 pl/sql dom 解析器解析 XML 的最简单方法