XMLTABLE을 사용하여 SOAP의 CDATA 섹션 구문 분석

존 K.

XMLTABLE을 사용하여 SOAP 응답의 CDATA 섹션을 구문 분석하는 방법을 알아보기 위해이 스레드 의 예제를 따르고 있습니다. 데이터베이스는 Oracle Database 11g Enterprise Edition 11.2.0.4.0입니다.

내가 살펴본 예제와 유사하게 작동하는 쿼리를 가질 수 있도록 구문 분석해야하는 SOAP 응답을 수정했습니다.

따라서 이것은 약간 단순화 된 응답 봉투이지만 정상적으로 작동하는 것입니다.

CREATE TABLE xml_tab (xml_data xmltype);

DECLARE l
l_xmltype xmltype;

BEGIN

SELECT xmltype('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:sawsoap="urn://oracle.bi.webservices/v6">  
<soap:Body>    
<sawsoap:executeSQLQueryResult>      
<sawsoap:return xsi:type="sawsoap:QueryResults">        
<sawsoap:rowset><![CDATA[<Data><Row><Column0>1200</Column0><Column1>East Region</Column1></Row><Row><Column0>3000</Column0><Column1>West Region</Column1></Row></Data>]]></sawsoap:rowset>        
<sawsoap:queryID/>        
<sawsoap:finished>true</sawsoap:finished>      
</sawsoap:return>    
</sawsoap:executeSQLQueryResult>  
</soap:Body>
</soap:Envelope>') INTO l_xmltype FROM dual ;

INSERT INTO xml_tab VALUES(l_xmltype);

END;

그리고이 쿼리는 내가 원하는 결과를 반환합니다.

SELECT B2.*  
   FROM 
   xml_tab x,
   XMLTable(  
         XMLNamespaces(  
           'http://schemas.xmlsoap.org/soap/envelope/' AS "SOAP-ENV"  
            ,'urn://oracle.bi.webservices/v6' AS  "sawsoap"                
          )  
        , 'SOAP-ENV:Envelope/SOAP-ENV:Body/sawsoap:executeSQLQueryResult/sawsoap:return/sawsoap:rowset'  
          passing    x.XML_DATA 
          columns Row1 clob path '.'  
       ) A1,
        XMLTable(  
         '/Data/Row'  
         passing xmlparse(document A1.Row1)  
         columns    
         Amount number PATH 'Column0',
         Region varchar2(60) PATH 'Column1'
       ) B2;



AMOUNT REGION                                                     
  ---------- ------------------------------------------------------------
  1200 East Region                                                  
  3000 West Region 

불행히도 내가 구문 분석해야하는 실제 SOAP 응답은 다음과 같습니다.

truncate table xml_tab;

 DECLARE
  l_xmltype xmltype;
BEGIN
  SELECT xmltype('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:sawsoap="urn://oracle.bi.webservices/v6">
  <soap:Body>
    <sawsoap:executeSQLQueryResult>
      <sawsoap:return xsi:type="sawsoap:QueryResults">
        <sawsoap:rowset><![CDATA[<rowset xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" ><Row><Column0>01200</Column0><Column1>East Region</Column1></Row><Row><Column0>3000</Column0><Column1>West Region</Column1></Row></rowset>]]></sawsoap:rowset>
        <sawsoap:queryID/>
        <sawsoap:finished>true</sawsoap:finished>
      </sawsoap:return>
    </sawsoap:executeSQLQueryResult>
  </soap:Body>
</soap:Envelope>')
  INTO l_xmltype
  FROM dual ;
  INSERT INTO xml_tab VALUES
    (l_xmltype
    );
END;

이 비트로 인해 행 집합 xmlns = "urn : schemas-microsoft-com : xml-analysis : rowset", 내 코드가 더 이상 작동하지 않으며이 문제를 극복하는 방법을 모릅니다. 이 SOAP 응답을 성공적으로 구문 분석 할 수있는 내 쿼리 수정을 제안 할 수 있다면 도움을 주시면 감사하겠습니다.

Arkadiusz Łukasiewicz

1) secound sopa 요청에 cdata에 잘못된 xml이 있습니다.

SELECT A1.Row1  
   FROM 
   xml_tab x,
   XMLTable(  
         XMLNamespaces(  
           'http://schemas.xmlsoap.org/soap/envelope/' AS "SOAP-ENV"  
            ,'urn://oracle.bi.webservices/v6' AS  "sawsoap"                
          )  
        , 'SOAP-ENV:Envelope/SOAP-ENV:Body/sawsoap:executeSQLQueryResult/sawsoap:return/sawsoap:rowset'  
          passing    x.XML_DATA 
          columns Row1 clob path '.'  
       ) A1

보고

<rowset xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" >
  <Row>
    <Column0>01200/Column0>   --<-- invalid tag column0 isn't closed
    <Column1>East Region</Column1>
    </Row>
  <Row>
    <Column0>3000</Column0>
    <Column1>West Region</Column1>
    </Row>
</rowset>

첫 번째 xml (cdata) row요소의 경로 /Data/row두 번째입니다 /rowset/row. 두 번째 xml (cdata)에는 기본 namsespace 선언도 있습니다 xmlns="urn:schemas-microsoft-com:xml-analysis:rowset".

두 번째 xmltable에서 경로를 변경 '*/Row'하고 xml 네임 스페이스를 제거 할 수 있습니다 .passing xmlparse(document regexp_replace(A1.Row1,'xmlns=".*"', ''))

  SELECT  B2.*
       FROM 
       xml_tab x,
       XMLTable(  
             XMLNamespaces(  
               'http://schemas.xmlsoap.org/soap/envelope/' AS "SOAP-ENV"  
                ,'urn://oracle.bi.webservices/v6' AS  "sawsoap"                
              )  
            , 'SOAP-ENV:Envelope/SOAP-ENV:Body/sawsoap:executeSQLQueryResult/sawsoap:return/sawsoap:rowset'  
              passing    x.XML_DATA 
              columns Row1 clob path '.'  
           ) A1
          ,
            XMLTable(  
             '/*/Row'  
            passing xmlparse(document regexp_replace(A1.Row1,'xmlns=".*"', ''))  
             columns    
            Amount number PATH 'Column0',
            Region varchar2(60) PATH 'Column1'
          ) B2;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

SOAP 요청의 CDATA 섹션에 XML을 포함 할 때 구문 분석 오류

분류에서Dev

셸을 사용하여 YAML 섹션 구문 분석

분류에서Dev

XML을 구문 분석하는 동안 CDATA 섹션의 텍스트가 규칙적으로 보이지 않습니다.

분류에서Dev

RubyXL을 사용하여 Excel 스프레드 시트의 특정 섹션 구문 분석

분류에서Dev

Scrapy를 사용하여 소스 코드의 두 가지 섹션을 구문 분석하고 결과를 결합하려면 어떻게해야합니까?

분류에서Dev

XML 파일의 구문 분석 섹션

분류에서Dev

교체하지 않고 Jsoup을 사용하여 CDATA 내부의 태그를 자동으로 구문 분석하는 방법

분류에서Dev

Decodable을 사용하여 JSON을 배열 내부에 배열이있는 TableView 섹션으로 구문 분석

분류에서Dev

xmlToList의 CDATA 필드 구문 분석

분류에서Dev

PHP를 사용하여 CDATA XML을 구문 분석하는 방법은 무엇입니까?

분류에서Dev

CDATA 구문 분석 (하나 더)

분류에서Dev

TSQL을 사용하여 명령 줄 옵션 구문 분석

분류에서Dev

raku : 섹션을 구문 분석하기위한 마크 다운 문법

분류에서Dev

SOAP 응답의 구문 분석을 수행하는 방법

분류에서Dev

TBXML을 사용하여 XML의 루트 요소 구문 분석

분류에서Dev

GSON을 사용하여 ArrayList의 Arraylist 구문 분석

분류에서Dev

Jackson을 사용하여 Scala의 ClassCastException 구문 분석 맵

분류에서Dev

양식 옵션을 사용하여 요청 가져 오기의 값 구문 분석

분류에서Dev

구문 분석을 사용하여 nil 옵션에 문제가 있음

분류에서Dev

Oracle에서 CDATA 내부의 데이터를 구문 분석하는 방법

분류에서Dev

sed를 사용하여 빈 줄로 구분 된 파일 섹션의 특정 줄을 인쇄하는 방법

분류에서Dev

xpath를 사용하여 tika로 사용자 정의 xml을 구문 분석

분류에서Dev

jQuery를 사용하여 XML 컬렉션을 구문 분석하는 방법

분류에서Dev

형식화의 HashMap를 사용하여 문자열을 구문 분석

분류에서Dev

Moshi 및 Retrofit을 사용하여 동적 문자열의 객체 구문 분석

분류에서Dev

Boost-spirit을 사용하여 15 자 이상의 문자열 구문 분석

분류에서Dev

R을 사용하여 함수의 여러 명명 인수 구문 분석

분류에서Dev

R에서 여러 섹션을 포함하는 텍스트 파일 구문 분석

분류에서Dev

긴 텍스트의 Java 정규식 구문 분석 섹션

Related 관련 기사

  1. 1

    SOAP 요청의 CDATA 섹션에 XML을 포함 할 때 구문 분석 오류

  2. 2

    셸을 사용하여 YAML 섹션 구문 분석

  3. 3

    XML을 구문 분석하는 동안 CDATA 섹션의 텍스트가 규칙적으로 보이지 않습니다.

  4. 4

    RubyXL을 사용하여 Excel 스프레드 시트의 특정 섹션 구문 분석

  5. 5

    Scrapy를 사용하여 소스 코드의 두 가지 섹션을 구문 분석하고 결과를 결합하려면 어떻게해야합니까?

  6. 6

    XML 파일의 구문 분석 섹션

  7. 7

    교체하지 않고 Jsoup을 사용하여 CDATA 내부의 태그를 자동으로 구문 분석하는 방법

  8. 8

    Decodable을 사용하여 JSON을 배열 내부에 배열이있는 TableView 섹션으로 구문 분석

  9. 9

    xmlToList의 CDATA 필드 구문 분석

  10. 10

    PHP를 사용하여 CDATA XML을 구문 분석하는 방법은 무엇입니까?

  11. 11

    CDATA 구문 분석 (하나 더)

  12. 12

    TSQL을 사용하여 명령 줄 옵션 구문 분석

  13. 13

    raku : 섹션을 구문 분석하기위한 마크 다운 문법

  14. 14

    SOAP 응답의 구문 분석을 수행하는 방법

  15. 15

    TBXML을 사용하여 XML의 루트 요소 구문 분석

  16. 16

    GSON을 사용하여 ArrayList의 Arraylist 구문 분석

  17. 17

    Jackson을 사용하여 Scala의 ClassCastException 구문 분석 맵

  18. 18

    양식 옵션을 사용하여 요청 가져 오기의 값 구문 분석

  19. 19

    구문 분석을 사용하여 nil 옵션에 문제가 있음

  20. 20

    Oracle에서 CDATA 내부의 데이터를 구문 분석하는 방법

  21. 21

    sed를 사용하여 빈 줄로 구분 된 파일 섹션의 특정 줄을 인쇄하는 방법

  22. 22

    xpath를 사용하여 tika로 사용자 정의 xml을 구문 분석

  23. 23

    jQuery를 사용하여 XML 컬렉션을 구문 분석하는 방법

  24. 24

    형식화의 HashMap를 사용하여 문자열을 구문 분석

  25. 25

    Moshi 및 Retrofit을 사용하여 동적 문자열의 객체 구문 분석

  26. 26

    Boost-spirit을 사용하여 15 자 이상의 문자열 구문 분석

  27. 27

    R을 사용하여 함수의 여러 명명 인수 구문 분석

  28. 28

    R에서 여러 섹션을 포함하는 텍스트 파일 구문 분석

  29. 29

    긴 텍스트의 Java 정규식 구문 분석 섹션

뜨겁다태그

보관