Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
如何使用PL/SQL从XML文件提取数据_Xml_Plsql - Fatal编程技术网

如何使用PL/SQL从XML文件提取数据

如何使用PL/SQL从XML文件提取数据,xml,plsql,Xml,Plsql,如何使用PL/SQL从XML中提取数据 <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <!DOCTYPE BPS SYSTEM "bpml.dtd"> <BPS Created="2012-04-24 11:40:41"> <Machine SerialNumber="" Site="" SoftwareRelease="MAP_248204031" VersionInfo="" Name

如何使用PL/SQL从XML中提取数据

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE BPS SYSTEM "bpml.dtd">
<BPS Created="2012-04-24 11:40:41">
<Machine SerialNumber="" Site="" SoftwareRelease="MAP_248204031" VersionInfo="" Name="" Type="BPS200">
  <ParameterSection Number="6" StartTime="2012-04-24 11:23:01" EndTime="1970-01-01 00:00:00">
    <HeadercardUnit HeaderCardID="1706539" DepositID="01706539" StartTime="2012-04-24 11:39:57" MilliSec="0" EndTime="2012-04-24 11:40:40" Rejects="NO">
      <Counter Currency="HRK" DenomID="22550" Value="200" Quality="Fit" Output="Stacked" Number="192"></Counter>
      <Counter Currency="HRK" DenomID="22550" Value="200" Quality="Unfit" Output="Stacked" Number="7"></Counter>
    </HeadercardUnit>
  </ParameterSection>
</Machine>
</BPS>
XML在DB中保存为CLOB。我需要从XML中提取以下值:

通货 德诺米德 价值 质量 输出 ...
您需要能够在PL/SQL中解析该XML。有内置的软件包可以做到这一点。解析XML后,可以使用函数从中获取数据

DECLARE
  x XMLType := XMLType(
    '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
     <!DOCTYPE BPS SYSTEM "bpml.dtd">
     <BPS Created="2012-04-24 11:40:41">
         <Machine SerialNumber="" Site="" SoftwareRelease="MAP_248204031" VersionInfo="" Name="" Type="BPS200">
             <ParameterSection Number="6" StartTime="2012-04-24 11:23:01" EndTime="1970-01-01 00:00:00">
                 <HeadercardUnit HeaderCardID="1706539" DepositID="01706539" StartTime="2012-04-24 11:39:57" MilliSec="0" EndTime="2012-04-24 11:40:40" Rejects="NO">
                     <Counter Currency="HRK" DenomID="22550" Value="200" Quality="Fit" Output="Stacked" Number="192"></Counter>
                     <Counter Currency="HRK" DenomID="22550" Value="200" Quality="Unfit" Output="Stacked" Number="7"></Counter>
                 </HeadercardUnit>
             </ParameterSection>
         </Machine>
     </BPS>');
BEGIN
  FOR r IN (
    SELECT ExtractValue(Value(p),'/@Currency') as currency
          ,ExtractValue(Value(p),'/@DenomID') as denomid
          ,ExtractValue(Value(p),'/@Value') as val
    FROM   TABLE(XMLSequence(Extract(x,'/BPS/Machine/ParameterSection/HeaderCardUnit/Counter'))) p
    ) LOOP
    -- you can use values for r.currency, r.denomid, r.val
    NULL;
  END LOOP;
END;

我没有bpml.dtd文件。我删除了第二行


你好,帕布罗·圣克鲁斯,这是我使用的提取方法。正如在每个标记中一样,值为attribute。如何提取?转换器:=XMLPARSER.NEWPARSER;PARSECLOBconverter,xml_内容;XmlDoc:=XMLPARSER.GETDOCUMENTconverter;WABlockList:=XMLDOM.GETELEMENTSBYTAGNAMEXmlDoc,'BPS';我需要得到这个值“22550”,“200”,“适合”。。。从这一行中,您需要从XML中提取哪些特定数据?hi@nop77svk,我想提取货币、denomID、值、数量、输出。。。。但是这个xml作为CLOB保存在数据库中?从TableExtractX中,“/BPS/Machine/ParameterSection/HeadercardUnit/Counter”p循环我的数据作为CLOB保存在DB中。。如果将xml保存在数据库中,则此方法无法工作。如果您给我表结构以及您遇到了什么错误,我可能会有所帮助。我在数据库中的xml是我在顶部共享的xml。我可以知道如何删除第二行吗?我已经解决了这个clob到xml的问题。
DECLARE
  x XMLTYPE := XMLTYPE(
    '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
     <BPS Created="2012-04-24 11:40:41">
         <Machine SerialNumber="" Site="" SoftwareRelease="MAP_248204031" VersionInfo="" Name="" Type="BPS200">
             <ParameterSection Number="6" StartTime="2012-04-24 11:23:01" EndTime="1970-01-01 00:00:00">
                 <HeadercardUnit HeaderCardID="1706539" DepositID="01706539" StartTime="2012-04-24 11:39:57" MilliSec="0" EndTime="2012-04-24 11:40:40" Rejects="NO">
                     <Counter Currency="HRK" DenomID="22550" Value="200" Quality="Fit" Output="Stacked" Number="192"></Counter>
                     <Counter Currency="HRK" DenomID="22550" Value="200" Quality="Unfit" Output="Stacked" Number="7"></Counter>
                 </HeadercardUnit>
             </ParameterSection>
         </Machine>
     </BPS>');
BEGIN
  FOR y IN (
    SELECT Value(p).extract('/Counter/@Currency').getStringVal() as currency,
          Value(p).extract('/Counter/@DenomID').getNumberVal() as denomid,
          Value(p).extract('/Counter/@Value').getNumberVal() as val,
          Value(p).extract('/Counter/@Quality').getStringVal() as qual,
          Value(p).extract('/Counter/@Output').getStringVal() as output,
           Value(p).extract('/Counter/@Number').getNumberVal() as numb
    FROM   TABLE(XMLSequence(Extract(x,'/BPS/Machine/ParameterSection/HeadercardUnit/Counter'))) p
    ) LOOP

    DBMS_OUTPUT.put_line(y.currency||','||y.denomid||','|| y.val||','||y.qual||','||y.output||','|| y.numb );

    NULL;
  END LOOP;
END;