Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
检查XML中的值_Xml_Oracle_Xslt_Xpath_Plsql - Fatal编程技术网

检查XML中的值

检查XML中的值,xml,oracle,xslt,xpath,plsql,Xml,Oracle,Xslt,Xpath,Plsql,我有一个变量 LRowNode DBMS_XMLDOM.DOMNode; 包含(示例) 12 0 10 0 0 0 或 0 0 0 0 0 0 如何检查是否至少有一个非空和非空的这只是一个基本示例,可能不适合您,但应该让您了解如何使用DBMS_XMLDOM 另一种选择是使用DBMS_XMLDOM.GETXMLTYPE来更改游戏规则,使用所有这些XMLTYPE好东西 create or replace function has_data (p_node in dbms_xmldom.do

我有一个变量

LRowNode DBMS_XMLDOM.DOMNode;
包含(示例)


12
0
10
0
0
0


0
0
0
0
0
0

如何检查是否至少有一个非空和非空的

这只是一个基本示例,可能不适合您,但应该让您了解如何使用DBMS_XMLDOM

另一种选择是使用DBMS_XMLDOM.GETXMLTYPE来更改游戏规则,使用所有这些XMLTYPE好东西

create or replace function has_data (p_node in dbms_xmldom.domnode)
return boolean as
  subnodes dbms_xmldom.domnodelist;
  node dbms_xmldom.domnode;
  strval varchar2(32767);
  val number;
begin
  subnodes := dbms_xmldom.getchildnodes(p_node);

  dbms_output.put_line('number of subnodes: ' || dbms_xmldom.getlength(subnodes));

  for i in 0 .. dbms_xmldom.getlength(subnodes) - 1 loop
    node := dbms_xmldom.item(subnodes, i);
    strval := dbms_xmldom.getnodevalue(dbms_xmldom.getfirstchild(node));
    dbms_output.put_line(
      '(' || i || ') ' ||
      dbms_xmldom.gettagname(dbms_xmldom.makeelement(node)) ||
      ' = ' || strval
    );

    if strval is not null then
      val := to_number(strval);
      if val > 0 then
        dbms_output.put_line('Node has data.');
        return true;
      end if;
    end if;

  end loop;

  dbms_output.put_line('Node has no data.');
  return false;
end;
/
show errors

declare
  dataset1 constant varchar2(32767) :=
'<N_4883636>
  <TID_23787542>12</TID_23787542>
  <TID_23787543></TID_23787543>
  <TID_23787532/>
  <TID_23787533>0</TID_23787533>
  <TID_23787534/>
  <TID_23787535/>
  <TID_23787536>10</TID_23787536>
  <TID_23787537/>
  <TID_23787538/>
  <TID_23787539>0</TID_23787539>
  <TID_23787540>0</TID_23787540>
  <TID_23787541>0</TID_23787541>
</N_4883636>';

  dataset2 constant varchar2(32767) :=
'<N_4883636>
  <TID_23787542>0</TID_23787542>
  <TID_23787543></TID_23787543>
  <TID_23787532/>
  <TID_23787533>0</TID_23787533>
  <TID_23787534/>
  <TID_23787535/>
  <TID_23787536>0</TID_23787536>
  <TID_23787537/>
  <TID_23787538/>
  <TID_23787539>0</TID_23787539>
  <TID_23787540>0</TID_23787540>
  <TID_23787541>0</TID_23787541>
</N_4883636>';

  dataset3 constant varchar2(32767) :=
'<N_4883636>
  <TID_23787542>0</TID_23787542>
  <TID_23787543>0</TID_23787543>
  <TID_23787533>3</TID_23787533>
</N_4883636>';

  doc dbms_xmldom.domdocument;
  nodes dbms_xmldom.domnodelist;
  x boolean;
begin
  doc := dbms_xmldom.newdomdocument(dataset1);
  nodes := dbms_xmldom.getelementsbytagname(doc, 'N_4883636');
  x := has_data(dbms_xmldom.item(nodes, 0));

  doc := dbms_xmldom.newdomdocument(dataset2);
  nodes := dbms_xmldom.getelementsbytagname(doc, 'N_4883636');
  x := has_data(dbms_xmldom.item(nodes, 0));

  doc := dbms_xmldom.newdomdocument(dataset3);
  nodes := dbms_xmldom.getelementsbytagname(doc, 'N_4883636');
  x := has_data(dbms_xmldom.item(nodes, 0));
end;
/
create或replace函数具有_数据(dbms_xmldom.domnode中的p_节点)
返回布尔值作为
子节点dbms_xmldom.domnodelist;
节点dbms_xmldom.domnode;
strval varchar2(32767);
val数;
开始
子节点:=dbms_xmldom.getchildnodes(p_节点);
dbms_output.put_line('子节点数:'| | dbms_xmldom.getlength(子节点));
因为我在0。。dbms_xmldom.getlength(子节点)-1循环
节点:=dbms_xmldom.item(子节点,i);
strval:=dbms_xmldom.getnodevalue(dbms_xmldom.getfirstchild(node));
dbms_output.put_行(
“(“| |我| |”)”||
dbms_xmldom.gettagname(dbms_xmldom.makeelement(节点))||
“=”| | strval
);
如果strval不为null,则
val:=to_编号(strval);
如果val>0,则
dbms_output.put_行('节点有数据');
返回true;
如果结束;
如果结束;
端环;
dbms_output.put_line('节点没有数据');
返回false;
结束;
/
显示错误
声明
数据集1常数varchar2(32767):=
'
12
0
10
0
0
0
';
数据集2常数varchar2(32767):=
'
0
0
0
0
0
0
';
数据集3常数varchar2(32767):=
'
0
0
3.
';
doc dbms_xmldom.domdocument;
节点dbms_xmldom.domnodelist;
x布尔;
开始
doc:=dbms_xmldom.newdomdocument(数据集1);
节点:=dbms_xmldom.getelementsbytagname(文档'N_4883636');
x:=具有_数据(dbms_xmldom.item(nodes,0));
doc:=dbms_xmldom.newdomdocument(数据集2);
节点:=dbms_xmldom.getelementsbytagname(文档'N_4883636');
x:=具有_数据(dbms_xmldom.item(nodes,0));
doc:=dbms_xmldom.newdomdocument(数据集3);
节点:=dbms_xmldom.getelementsbytagname(文档'N_4883636');
x:=具有_数据(dbms_xmldom.item(nodes,0));
结束;
/
<N_4883636>
  <TID_23787542>0</TID_23787542>
  <TID_23787543></TID_23787543>
  <TID_23787532/>
  <TID_23787533>0</TID_23787533>
  <TID_23787534/>
  <TID_23787535/>
  <TID_23787536>0</TID_23787536>
  <TID_23787537/>
  <TID_23787538/>
  <TID_23787539>0</TID_23787539>
  <TID_23787540>0</TID_23787540>
  <TID_23787541>0</TID_23787541>
</N_4883636>
create or replace function has_data (p_node in dbms_xmldom.domnode)
return boolean as
  subnodes dbms_xmldom.domnodelist;
  node dbms_xmldom.domnode;
  strval varchar2(32767);
  val number;
begin
  subnodes := dbms_xmldom.getchildnodes(p_node);

  dbms_output.put_line('number of subnodes: ' || dbms_xmldom.getlength(subnodes));

  for i in 0 .. dbms_xmldom.getlength(subnodes) - 1 loop
    node := dbms_xmldom.item(subnodes, i);
    strval := dbms_xmldom.getnodevalue(dbms_xmldom.getfirstchild(node));
    dbms_output.put_line(
      '(' || i || ') ' ||
      dbms_xmldom.gettagname(dbms_xmldom.makeelement(node)) ||
      ' = ' || strval
    );

    if strval is not null then
      val := to_number(strval);
      if val > 0 then
        dbms_output.put_line('Node has data.');
        return true;
      end if;
    end if;

  end loop;

  dbms_output.put_line('Node has no data.');
  return false;
end;
/
show errors

declare
  dataset1 constant varchar2(32767) :=
'<N_4883636>
  <TID_23787542>12</TID_23787542>
  <TID_23787543></TID_23787543>
  <TID_23787532/>
  <TID_23787533>0</TID_23787533>
  <TID_23787534/>
  <TID_23787535/>
  <TID_23787536>10</TID_23787536>
  <TID_23787537/>
  <TID_23787538/>
  <TID_23787539>0</TID_23787539>
  <TID_23787540>0</TID_23787540>
  <TID_23787541>0</TID_23787541>
</N_4883636>';

  dataset2 constant varchar2(32767) :=
'<N_4883636>
  <TID_23787542>0</TID_23787542>
  <TID_23787543></TID_23787543>
  <TID_23787532/>
  <TID_23787533>0</TID_23787533>
  <TID_23787534/>
  <TID_23787535/>
  <TID_23787536>0</TID_23787536>
  <TID_23787537/>
  <TID_23787538/>
  <TID_23787539>0</TID_23787539>
  <TID_23787540>0</TID_23787540>
  <TID_23787541>0</TID_23787541>
</N_4883636>';

  dataset3 constant varchar2(32767) :=
'<N_4883636>
  <TID_23787542>0</TID_23787542>
  <TID_23787543>0</TID_23787543>
  <TID_23787533>3</TID_23787533>
</N_4883636>';

  doc dbms_xmldom.domdocument;
  nodes dbms_xmldom.domnodelist;
  x boolean;
begin
  doc := dbms_xmldom.newdomdocument(dataset1);
  nodes := dbms_xmldom.getelementsbytagname(doc, 'N_4883636');
  x := has_data(dbms_xmldom.item(nodes, 0));

  doc := dbms_xmldom.newdomdocument(dataset2);
  nodes := dbms_xmldom.getelementsbytagname(doc, 'N_4883636');
  x := has_data(dbms_xmldom.item(nodes, 0));

  doc := dbms_xmldom.newdomdocument(dataset3);
  nodes := dbms_xmldom.getelementsbytagname(doc, 'N_4883636');
  x := has_data(dbms_xmldom.item(nodes, 0));
end;
/
LNonEmptyIndexes := DBMS_XSLPROCESSOR.SELECTNODES(LRowNode, './*[text()!=''0'']');
nNON_EMPTY_COUNT := DBMS_XMLDOM.getLength(LNonEmptyIndexes);
IF (nNON_EMPTY_COUNT != 0) THEN
...
END IF;