PLSQL XML 通过标签和值转换为 table
PLSQL XML into table by tag and value
在 PL/SQL 中,是否可以将 XML 转换为 table 按标签和值拆分而不对任何列进行硬编码?
示例XML:
<responseObject>
<error>That is not a valid request</error>
<errorCode>A11</errorCode>
<value>A</value>
</responseObject>
示例输出:
Tag Value
------------------------------------------------------
error That is not a valid request
errorCode A11
value A
我通过硬编码 error
在 XMLTABLE
查询中声明 COLUMNS
和 PATH
来设法获得特定值,但我想动态地这样做,因为responseObject
中的标签可能会有所不同。我正在尝试将所有这些放入一个关联数组中。
我想您可能需要这样的东西(适用于 Oracle 11g):
DECLARE
lxml xmltype;
begin
lxml :=
xmltype('<responseObject>
<error>That is not a valid request</error>
<errorCode>A11</errorCode>
<value>A</value>
</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;
我基本上改编了这里提供的答案:
并使用 name() 函数检索 XML 节点的名称
在 PL/SQL 中,是否可以将 XML 转换为 table 按标签和值拆分而不对任何列进行硬编码?
示例XML:
<responseObject>
<error>That is not a valid request</error>
<errorCode>A11</errorCode>
<value>A</value>
</responseObject>
示例输出:
Tag Value
------------------------------------------------------
error That is not a valid request
errorCode A11
value A
我通过硬编码 error
在 XMLTABLE
查询中声明 COLUMNS
和 PATH
来设法获得特定值,但我想动态地这样做,因为responseObject
中的标签可能会有所不同。我正在尝试将所有这些放入一个关联数组中。
我想您可能需要这样的东西(适用于 Oracle 11g):
DECLARE
lxml xmltype;
begin
lxml :=
xmltype('<responseObject>
<error>That is not a valid request</error>
<errorCode>A11</errorCode>
<value>A</value>
</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;
我基本上改编了这里提供的答案:
并使用 name() 函数检索 XML 节点的名称