【发布时间】:2018-10-15 10:28:14
【问题描述】:
在 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 和 error。在示例 2 中,我想获取 response1、response2、response4 和 random。目前我的 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;
【问题讨论】:
-
您是否尝试过仅获取 value1 和 value2 的值而不包含任何路径?你能举一些代码示例来说明你是如何检索这些值的吗?
-
更新问题。注意最后一个节点不一定是value1/value2。
-
您有一个实际的 XML 示例吗?和用例?我想不出一个用例来获取最后一个属性的值。通常你想获取特定属性的值。
-
我无法给出我正在使用的实际 XML,但我正在使用它来解析 SOAP 响应。我正在调用不同的函数并得到不同的响应,但所有响应都有我在最后一个节点中需要的值。
标签: xml oracle xpath plsql xmltable