Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用xmlsequence提取函数(PL/SQL)进行XML解析_Xml_Oracle_Plsql_Namespaces - Fatal编程技术网

使用xmlsequence提取函数(PL/SQL)进行XML解析

使用xmlsequence提取函数(PL/SQL)进行XML解析,xml,oracle,plsql,namespaces,Xml,Oracle,Plsql,Namespaces,我正在尝试使用以下查询(用于游标函数)解析XML文件: 我面临的问题是,我的XML文件包含两个名称空间,如下所示: 如果只有一个xmlns,我可以通过将p_urn定义为xmlns的值来解决这个问题 在我有2个xmlns的情况下,如何使用提取功能实现这一点?您可以跳过或随意梳理部分或全部元素: -- with only p_urn_1 - wildcard inner default namespace select extractvalue(value(p), '/*:Header/*:Ve

我正在尝试使用以下查询(用于游标函数)解析XML文件:

我面临的问题是,我的XML文件包含两个名称空间,如下所示:

如果只有一个xmlns,我可以通过将p_urn定义为xmlns的值来解决这个问题

在我有2个xmlns的情况下,如何使用提取功能实现这一点?

您可以跳过或随意梳理部分或全部元素:

-- with only p_urn_1 - wildcard inner default namespace
select extractvalue(value(p), '/*:Header/*:VersionInfo/*:Version/text()', p_urn_1) as version
from table (xmlsequence(extract(xmltype(pp_xml), '/Document/*:Header', p_urn_1))) p;

-- with only p_urn_2 - wildcard outer default namespace
select extractvalue(value(p), '/Header/VersionInfo/Version/text()', p_urn_2) as version
from table (xmlsequence(extract(xmltype(pp_xml), '/*:Document/Header', p_urn_2))) p;

-- with only p_urn_2 - skip outer element
select extractvalue(value(p), '/Header/VersionInfo/Version/text()', p_urn_2) as version
from table (xmlsequence(extract(xmltype(pp_xml), '//Header', p_urn_2))) p;

-- without either p_urn_1 or p_urn_2 - wildcard everything
select extractvalue(value(p), '/*:Header/*:VersionInfo/*:Version/text()') as version
from table (xmlsequence(extract(xmltype(pp_xml), '/*:Document/*:Header'))) p;

-- with both p_urn_1 and p_urn_2 - single wildcard (safe-ish)
select extractvalue(value(p), '/Header/VersionInfo/Version/text()', p_urn_2) as version
from table (xmlsequence(extract(xmltype(pp_xml), '/Document/*:Header', p_urn_1))) p;


但是您正在使用几个不推荐使用的函数。您应该看看XMLQuery和XMLTable,它们允许多个名称空间;尽管动态提供名称空间并不容易。

请编辑您的问题,将原始数据、查询和预期结果显示为格式化文本,而不是图像。