xml - PLSQL XMLTable XPath 获取最深深度的所有标签

标签 xml oracle xpath plsql xmltable

在PL/SQL中有没有办法获取最深深度的所有节点?

示例1:

<responseObject>
    <response>
        <value1>A</value1>
        <value2>B</value2>
        <error>A11</error>
    <response>
<responseObject>

示例2:

<responseObject>
    <response1>A</response1>
    <response2>B</response2>
    <response4>D</response4>
    <random>1</random>
<responseObject>

在示例 1 中,我想获取 value1、value2 和错误。在示例 2 中,我想获得response1、response2、response4 和随机数。目前我的 XPath 设置为 '/responseObject/*/*' 但这不适用于第二种情况。

示例代码:

DECLARE
  lxml xmltype;
begin
  lxml := 
  xmltype('<responseObject>
              <response>
                  <value1>A</value1>
                  <value2>B</value2>
                  <error>A11</error>
              <response>
           <responseObject>');

  FOR test IN (
    select tag,
           VALUE
    FROM   xmltable('responseObject/*/*'
             passing lxml
             columns
               tag VARCHAR2(128) path 'name()',
               VALUE VARCHAR2(128) path '.'
           ) t
  )
  LOOP
    dbms_output.put_line(test.tag || ' - ' || test.value);
  END LOOP;
end;

最佳答案

SQL Fiddle

Oracle 11g R2 架构设置:

CREATE TABLE table_name ( id, xml ) AS
SELECT 1, '<responseObject>
    <response>
        <value1>A</value1>
        <value2>B</value2>
        <error>A11</error>
    </response>
</responseObject>' FROM DUAL UNION ALL
SELECT 2, '<responseObject>
    <response1>A</response1>
    <response2>B</response2>
    <response4>D</response4>
    <random>1</random>
</responseObject>' FROM DUAL;

查询 1:

SELECT id, x.*
FROM   TABLE_NAME t
       CROSS JOIN
       xmltable(
         '/responseObject//*[last()][not(*)]'
         passing XMLType( t.xml )
         COLUMNS
           tag   VARCHAR2(128) path 'name()',
           value VARCHAR2(128) path '.'
       ) x

<强> Results :

| ID |    TAG | VALUE |
|----|--------|-------|
|  1 |  error |   A11 |
|  2 | random |     1 |

关于xml - PLSQL XMLTable XPath 获取最深深度的所有标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50183311/

相关文章:

xpath - Camel Apache : xpath to extract some value out of received XML

c# - 使用 xml.Load 打开 HTML 文档

xml - 防止 XSLT 1.0 中文件末尾的空白输出行

sql-server - 插入中保留的文档中 XML 节点的顺序?

java - Spark 过滤器从不应用于 Java 中的 DataFrame

python - 如何找到 HTML 元素所需的 XPath?

xml - 使用“。” XPath表达式中的(点或句点)

SQL oracle 添加一个值

java - 在 JDBC 中停止或终止长时间运行的查询

java - XSL 转换,然后在结果节点上进行 XPath 表达式