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 这个方法返回的到底是什么东西

去看一下 xml模型吧,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:更新了答案。 现在我得到了正确的过滤器,但错误的值 - 0 而不是 0 @DigitalGod: Xpath 是//member[*='CODE']/*/*/text()【参考方案2】:

简短的回答是您不会将数据库视为 ETL(提取、转换、加载)工具。您要做的是将此 XML 文件传递​​给使用 XPath 的单独程序并以这种方式处理它。数据库只应该存储数据。事实上,在过去的 5 个月里,我一直在删除像这样的“异国情调”代码,这些代码使得 Oracle 数据库需要 72 多个小时才能插入 40 万行。所以再次将其偏移到 xpath

查询看起来与上面的命令几乎相同

【讨论】:

目前情况下,我只能使用存储过程。

以上是关于oracle PL/SQL解析xml的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL 中解析 XML 或 JSON

pl/sql developer 登陆时 出现"ORA-12154: TNS:无法解析指定的连接标 ”!我在cmd里就能连接上。

如何在 PL/SQL 中解析 XML

使用 pl/sql dom 解析器解析 XML 的最简单方法

使用 PL/SQL 解析 XML 输出 html 中特定标签的内容

运行时解析 PL/SQL 的 Oracle Apex Cards 视图