Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
Sql 使用名称空间提取XML标记_Sql_Xml_Plsql_Xml Namespaces - Fatal编程技术网

Sql 使用名称空间提取XML标记

Sql 使用名称空间提取XML标记,sql,xml,plsql,xml-namespaces,Sql,Xml,Plsql,Xml Namespaces,我需要提取一个XML标记值,如下面的代码所示 打开服务器输出 声明 lv_xml varchar2(500); xmlstring-XMLTYPE; 瓦查尔2号(10); 开始 lv_xml:= ' 瓦尔1 VAL 2 VAL 3 '; xmlstring:=XMLTYPE.CREATEXML(lv_xml); 选择提取值(值(fd),'testTag2') 进入吕瓦尔 从表(XMLSEQUENCE(xmlstring.EXTRACT('TestMain'))f, 表(XMLSEQUENCE)(

我需要提取一个XML标记值,如下面的代码所示

打开服务器输出
声明
lv_xml varchar2(500);
xmlstring-XMLTYPE;
瓦查尔2号(10);
开始
lv_xml:=
'
瓦尔1
VAL 2
VAL 3
';
xmlstring:=XMLTYPE.CREATEXML(lv_xml);
选择提取值(值(fd),'testTag2')
进入吕瓦尔
从表(XMLSEQUENCE(xmlstring.EXTRACT('TestMain'))f,
表(XMLSEQUENCE)(提取值(f),
'TestMain/testTag2'))fd;
dbms_output.put_line('Val:'| | lv|Val);
例外情况
当其他人
dbms|u output.put|u行('Error:'|| SQLCODE |'.| SQLERRM);
结束;
/

当我运行它时,我得到一个异常
ORA-01403:找不到数据

我发现,如果删除XML名称空间
xmlns=”http://www.w3.org/2001/XMLSchema-instance“
,那么它工作正常。但是,我将从中提取值的XML流将采用这种格式(即,它将包含一个名称空间)

有没有任何方法可以在存在xmlns的情况下提取值?

给您:

declare
    lv_xml     varchar2(500);
    xmlstring  XMLTYPE;
    lv_val     varchar2(10);
BEGIN
    lv_xml :=
    '<?xml version="1.0" encoding="UTF-8"?>
    <TestMain xmlns="http://www.w3.org/2001/XMLSchema-instance">
        <testTag1>VAL 1</testTag1>
        <testTag2>VAL 2</testTag2>
        <testTag3>VAL 3</testTag3>
    </TestMain>';

    xmlstring := XMLTYPE.CREATEXML(lv_xml);

    SELECT EXTRACTVALUE(VALUE(fd), '.')
    INTO lv_val
    FROM TABLE(XMLSEQUENCE(xmlstring.EXTRACT('/TestMain', 'xmlns="http://www.w3.org/2001/XMLSchema-instance"'))) f,
        TABLE(XMLSEQUENCE(EXTRACT(VALUE(f), '/TestMain/testTag2', 'xmlns="http://www.w3.org/2001/XMLSchema-instance"'))) fd
    ;

    dbms_output.put_line('Val: '||lv_val);
EXCEPTION
    WHEN OTHERS THEN
       dbms_output.put_line('Error: '||SQLCODE||' '||SQLERRM);
END;
/
或者更具可读性(尽管功能上并非100%相同)


10秒钟的搜索将查找的文档,该文档指示它可以使用另一个名为
namespace\u string
的可选参数。
SELECT EXTRACTVALUE(xmlstring, '/TestMain/testTag2', 'xmlns="http://www.w3.org/2001/XMLSchema-instance"')
INTO lv_val
FROM dual;
lv_val := xmlstring.extract('/TestMain/testTag2/text()', 'xmlns="http://www.w3.org/2001/XMLSchema-instance"').getStringVal();