如何在 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:更新了答案。 现在我得到了正确的过滤器,但错误的值 - 0 而不是 0 @DigitalGod: Xpath 是//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 中特定标签的内容

如何在 PL/SQL 中解析逗号分隔的字符串? [复制]

在 PL/SQL 过程中解析具有名称空间的 XML 的未知数量节点?

如何在 PL/SQL 中读取 Result 标头 XML 标记