如何在 PL/SQL 中解析 XML
Posted
技术标签:
【中文标题】如何在 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
查询看起来与上面的命令几乎相同
【讨论】:
目前情况下,我只能使用存储过程。以上是关于如何在 PL/SQL 中解析 XML的主要内容,如果未能解决你的问题,请参考以下文章
使用 pl/sql dom 解析器解析 XML 的最简单方法
我正在尝试在 PL/SQL 中解析 XML。我无法从标签中检索属性值,我做错了啥?
使用 PL/SQL 解析 XML 输出 html 中特定标签的内容