插入soap xml内容后查询xml表

插入soap xml内容后查询xml表,xml,oracle,soap,Xml,Oracle,Soap,您好,在我将soap xml内容插入到名为foo的表中之后,但在查询内容时遇到了问题 <?xml version="1.0" encoding="UTF-8" ?> - <ns:AccountQueryPage_Output xmlns:ns="urn:crmondemand/ws/ecbs/account/"> - <ListOfAccount xmlns="urn:/crmondemand/xml/Account/Data" lastpage="true"

您好,在我将soap xml内容插入到名为foo的表中之后,但在查询内容时遇到了问题

  <?xml version="1.0" encoding="UTF-8" ?> 
- <ns:AccountQueryPage_Output xmlns:ns="urn:crmondemand/ws/ecbs/account/">
- <ListOfAccount xmlns="urn:/crmondemand/xml/Account/Data" lastpage="true">
- <Account>
  <Id>CCC-TEST01</Id> 
  <AccountName>John Smith Pty Ltd</AccountName> 
  </Account>
  </ListOfAccount>
  </ns:AccountQueryPage_Output>
我得到

ORA-31011: XML parsing failed
ORA-19213: error occurred in XML processing at lines 2
LPX-00209: PI names starting with XML are reserved
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1
31011. 00000 -  "XML parsing failed"
*Cause:    XML parser returned an error while trying to parse the document.
*Action:   Check if the document to be parsed is valid.
关于我做错了什么有什么帮助吗

多谢各位

@鲁德万

嗨,ruudvan,我想问你是否知道如何从xml文件中提取记录计数

我要抢17680

问候

Liem

函数EXTRACT和EXTRACTVALUE在11g中。您应该尝试使用XMLTABLE和XMLQUERY

下面是如何从XML中检索值。我向XML中添加了另一个测试帐户,这样您就知道它可以在多行上运行

WITH subq AS (SELECT XMLTYPE ('<?xml version="1.0" encoding="UTF-8" ?> 
 <ns:AccountQueryPage_Output xmlns:ns="urn:crmondemand/ws/ecbs/account/">
 <ListOfAccount xmlns="urn:/crmondemand/xml/Account/Data" lastpage="true">
 <Account>
  <Id>CCC-TEST01</Id> 
  <AccountName>John Smith Pty Ltd</AccountName> 
  </Account>
  <Account>
  <Id>CCC-TEST02</Id> 
  <AccountName>Test Pty Ltd</AccountName> 
  </Account>
  </ListOfAccount>
  </ns:AccountQueryPage_Output>') AS my_xml FROM DUAL)
SELECT Acct_id, Acct_Name
  FROM subq,
       XMLTABLE (
          xmlnamespaces ('urn:crmondemand/ws/ecbs/account/' AS "ns",
                         DEFAULT 'urn:/crmondemand/xml/Account/Data'),
          '/ns:AccountQueryPage_Output/ListOfAccount/Account'
          PASSING subq.my_xml
          COLUMNS Acct_ID VARCHAR2 (30) PATH 'Id',
                  Acct_Name VARCHAR2 (30) PATH 'AccountName');

感谢ruudvan,我会非常欣赏它的。我可以为select clob列替换xml内容的硬编码吗?例如,当我试图从scott.foo获取错误ORA-31011:xml解析失败ORA-19213:xml处理第2行出现错误LPX-00209:以xml开头的PI名称保留ORA-06512:SYS.XMLTYPE,第272行ORA-06512:1行xml\u响应的数据类型是什么?如果表中已有xml,则无需编写该子查询。只需从SCOTT.foo f、XMLTABLE中选择列……传递f.xml_响应列;。确保xmlnamespaces和xpath相同,或者相应地更改查询。
WITH subq AS (SELECT XMLTYPE ('<?xml version="1.0" encoding="UTF-8" ?> 
 <ns:AccountQueryPage_Output xmlns:ns="urn:crmondemand/ws/ecbs/account/">
 <ListOfAccount xmlns="urn:/crmondemand/xml/Account/Data" lastpage="true">
 <Account>
  <Id>CCC-TEST01</Id> 
  <AccountName>John Smith Pty Ltd</AccountName> 
  </Account>
  <Account>
  <Id>CCC-TEST02</Id> 
  <AccountName>Test Pty Ltd</AccountName> 
  </Account>
  </ListOfAccount>
  </ns:AccountQueryPage_Output>') AS my_xml FROM DUAL)
SELECT Acct_id, Acct_Name
  FROM subq,
       XMLTABLE (
          xmlnamespaces ('urn:crmondemand/ws/ecbs/account/' AS "ns",
                         DEFAULT 'urn:/crmondemand/xml/Account/Data'),
          '/ns:AccountQueryPage_Output/ListOfAccount/Account'
          PASSING subq.my_xml
          COLUMNS Acct_ID VARCHAR2 (30) PATH 'Id',
                  Acct_Name VARCHAR2 (30) PATH 'AccountName');