Oracle에서 네임 스페이스를 사용하여 XML을 쿼리하는 방법은 무엇입니까?

크리스 P.

완전한 XML 문서를 포함하는 XMLType 변수에서 PLSQL 프로 시저의 데이터를 다음 구조 (아래 단순화)로 추출해야합니다.

<?xml version="1.0" encoding="utf-8"?>
<AA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://my.domain/cat1/">
  <Element>
    <ID>2</ID>
    <Value>46544</Value>
  <Element>
</AA>

XMLTable 함수를 사용하고 있지만 /AA/Element데이터가없는 간단한 XPath 표현식을 사용합니다.

SELECT C1, C2
INTO v_id, v_val
FROM XMLTable('/AA/Element'
                   passing v_MyXML columns
                    C1 number path 'ID',
                    C2 number path 'Value'
                )

아래 표현식 중 어느 것도 사용하지 않습니다.

'/*.AA/Element'
'declare default element namespace "http://my.domain/cat1/"; /AA/Element'
'declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance"; declare namespace xsd="http://www.w3.org/2001/XMLSchema"; declare default element namespace "http://jpk.mf.gov.pl/wzor/2016/03/09/03094/"; /AA/Element'

데이터를 추출 할 수있는 유일한 방법은 문서 / 변수를 수정하고

<AA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://my.domain/cat1/">

<AA>

문서를 수정하고 적절한 속성을 가진 초기 구조를 반환해야하므로 완벽한 솔루션은 아닙니다. 아무도 데이터를 가져올 수 있도록 XPath 표현식을 수정하는 방법을 제안 할 수 있습니까? 아니면 AA 요소의 네임 스페이스를 무시하는 다른 방법을 사용할 수 있습니까?

user272735

@JensErat는 이미 XML 배경을 제공 했으므로 그럴 필요가 없습니다. 대신 아래에서 Oracle PL / SQL에서 모든 것을 적용하는 방법에 대한 실제 예제를 찾을 수 있습니다.

당신은 사용할 필요가 XML 네임 스페이스 조항XMLTABLE를 :

XMLNAMESPACES 절에는 XML 네임 스페이스 선언 집합이 포함됩니다. 이러한 선언은 행을 계산하는 XQuery 식 (평가 된 XQuery_string)과 전체 XMLTable 함수에 대한 열을 계산하는 XML_table_column의 PATH 절에있는 XPath 식에 의해 참조됩니다. COLUMNS 절의 PATH 표현식에서 규정 된 이름을 사용하려면 XMLNAMESPACES 절을 지정해야합니다.

기본 XML 네임 스페이스 절을 사용할 수도 있습니다 .

xmlnamespaces(default 'http://my.domain/cat1/')

그러면 네임 스페이스 접두사를 사용할 필요가 없습니다.

기본 네임 스페이스가없는 예

declare
  v_xml constant xmltype := xmltype('<AA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://my.domain/cat1/">
  <Element>
    <ID>2</ID>
    <Value>46544</Value>
  </Element>
</AA>'
);
 v_id number;
 v_value number;
begin
  select   id,   value_
    into v_id, v_value
  from xmltable(
    xmlnamespaces('http://my.domain/cat1/' as "foo"),
    '/foo:AA/foo:Element' passing v_xml
    columns
    id number path 'foo:ID',
    value_ number path 'foo:Value'
  );

  dbms_output.put_line('(v_id = ' || v_id || ')(v_value = ' || v_value || ')');
end;
/

기본 네임 스페이스가있는 예

declare
  v_xml constant xmltype := xmltype('<AA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://my.domain/cat1/">
  <Element>
    <ID>2</ID>
    <Value>46544</Value>
  </Element>
</AA>'
);
 v_id number;
 v_value number;
begin
  select   id,   value_
    into v_id, v_value
  from xmltable(
    xmlnamespaces(default 'http://my.domain/cat1/'),
    '/AA/Element' passing v_xml
    columns
    id number path 'ID',
    value_ number path 'Value'
  );

  dbms_output.put_line('(v_id = ' || v_id || ')(v_value = ' || v_value || ')');
end;
/

실행 예 :

SQL> @so58
(v_id = 2)(v_value = 46544)

PL/SQL procedure successfully completed.

SQL>

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Xstream을 사용하여 XML에서 네임 스페이스 접두사를 제거하는 방법은 무엇입니까?

분류에서Dev

Groovy에서 XmlSlurper와 함께 XML 네임 스페이스 사용-경로를 올바르게 쿼리하는 방법은 무엇입니까?

분류에서Dev

Groovy에서 XmlSlurper와 함께 XML 네임 스페이스 사용-경로를 올바르게 쿼리하는 방법은 무엇입니까?

분류에서Dev

기본 네임 스페이스를 제거하고 C #을 사용하여 xml의 루트 태그에 사용자 지정 네임 스페이스를 추가하는 방법은 무엇입니까?

분류에서Dev

네임 스페이스가있는 xml 파일에서 값을 추출하는 방법은 무엇입니까?

분류에서Dev

DoctrineCacheBundle cacheDriver에서 여러 네임 스페이스를 사용하는 방법은 무엇입니까?

분류에서Dev

비 네임 스페이스 인식 파서를 사용하여 Java에서 XSL 변환을 수행하는 방법은 무엇입니까?

분류에서Dev

올바른 디렉토리에 네임 스페이스를 사용하여 추진 빌드 모델을 만드는 방법은 무엇입니까?

분류에서Dev

OPENXML에서 네임 스페이스 속성을 사용하는 방법은 무엇입니까?

분류에서Dev

해당 네임 스페이스의 항목을 쿼리 할 수 있도록 Saxon CLI에서 XML 네임 스페이스를 정의하는 방법은 무엇입니까?

분류에서Dev

let 키워드를 사용하여 의사 네임 스페이스 코드에 별칭을 지정하는 방법은 무엇입니까?

분류에서Dev

PHP에서 네임 스페이스가있는 클래스를 사용하는 방법은 무엇입니까?

분류에서Dev

[Typescript] : 유형에 네임 스페이스 값을 사용하는 방법은 무엇입니까?

분류에서Dev

xml-patch 및 xpath를 사용하여 네임 스페이스로 xml 파일을 패치하는 방법은 무엇입니까?

분류에서Dev

생성기 백본에서 JST 네임 스페이스를 사용하는 방법은 무엇입니까?

분류에서Dev

네임 스페이스 내에서 만든 jQuery 변수를 사용하는 방법은 무엇입니까?

분류에서Dev

각도기 자동화에서 Javascript 네임 스페이스를 사용하는 방법은 무엇입니까?

분류에서Dev

XML 네임 스페이스와 함께 Scrapy XPath를 사용하는 방법은 무엇입니까?

분류에서Dev

Firefox에서 빈 네임 스페이스 생성을 방지하는 방법은 무엇입니까?

분류에서Dev

파이썬을 사용하여 기본 네임 스페이스가있는 xml 파일의 모든 요소의 xpath를 얻는 방법은 무엇입니까?

분류에서Dev

네임 스페이스의 작업 내에서 kubectl을 실행하는 방법은 무엇입니까?

분류에서Dev

관련 모델에서 네임 스페이스 모델을 참조하는 방법은 무엇입니까?

분류에서Dev

네임 스페이스가있는 System.Xml.XmlDocument.SelectNodes를 사용하여 자식 노드에 액세스하는 구문은 무엇입니까?

분류에서Dev

Typescript에서 'ts (2709) 유형으로 네임 스페이스를 사용할 수 없음'을 수정하는 방법은 무엇입니까?

분류에서Dev

파일간에 네임 스페이스를 사용하는 방법은 무엇입니까?

분류에서Dev

네임 스페이스 정보를 포함하여 XML 요소를 만드는 방법은 무엇입니까?

분류에서Dev

한 네임 스페이스에서 다른 네임 스페이스로 프로세스를 이동하는 방법은 무엇입니까?

분류에서Dev

SAX 파서로 네임 스페이스를 처리하는 방법은 무엇입니까?

분류에서Dev

Ruby에서 네임 스페이스 클래스를 정의 해제하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Xstream을 사용하여 XML에서 네임 스페이스 접두사를 제거하는 방법은 무엇입니까?

  2. 2

    Groovy에서 XmlSlurper와 함께 XML 네임 스페이스 사용-경로를 올바르게 쿼리하는 방법은 무엇입니까?

  3. 3

    Groovy에서 XmlSlurper와 함께 XML 네임 스페이스 사용-경로를 올바르게 쿼리하는 방법은 무엇입니까?

  4. 4

    기본 네임 스페이스를 제거하고 C #을 사용하여 xml의 루트 태그에 사용자 지정 네임 스페이스를 추가하는 방법은 무엇입니까?

  5. 5

    네임 스페이스가있는 xml 파일에서 값을 추출하는 방법은 무엇입니까?

  6. 6

    DoctrineCacheBundle cacheDriver에서 여러 네임 스페이스를 사용하는 방법은 무엇입니까?

  7. 7

    비 네임 스페이스 인식 파서를 사용하여 Java에서 XSL 변환을 수행하는 방법은 무엇입니까?

  8. 8

    올바른 디렉토리에 네임 스페이스를 사용하여 추진 빌드 모델을 만드는 방법은 무엇입니까?

  9. 9

    OPENXML에서 네임 스페이스 속성을 사용하는 방법은 무엇입니까?

  10. 10

    해당 네임 스페이스의 항목을 쿼리 할 수 있도록 Saxon CLI에서 XML 네임 스페이스를 정의하는 방법은 무엇입니까?

  11. 11

    let 키워드를 사용하여 의사 네임 스페이스 코드에 별칭을 지정하는 방법은 무엇입니까?

  12. 12

    PHP에서 네임 스페이스가있는 클래스를 사용하는 방법은 무엇입니까?

  13. 13

    [Typescript] : 유형에 네임 스페이스 값을 사용하는 방법은 무엇입니까?

  14. 14

    xml-patch 및 xpath를 사용하여 네임 스페이스로 xml 파일을 패치하는 방법은 무엇입니까?

  15. 15

    생성기 백본에서 JST 네임 스페이스를 사용하는 방법은 무엇입니까?

  16. 16

    네임 스페이스 내에서 만든 jQuery 변수를 사용하는 방법은 무엇입니까?

  17. 17

    각도기 자동화에서 Javascript 네임 스페이스를 사용하는 방법은 무엇입니까?

  18. 18

    XML 네임 스페이스와 함께 Scrapy XPath를 사용하는 방법은 무엇입니까?

  19. 19

    Firefox에서 빈 네임 스페이스 생성을 방지하는 방법은 무엇입니까?

  20. 20

    파이썬을 사용하여 기본 네임 스페이스가있는 xml 파일의 모든 요소의 xpath를 얻는 방법은 무엇입니까?

  21. 21

    네임 스페이스의 작업 내에서 kubectl을 실행하는 방법은 무엇입니까?

  22. 22

    관련 모델에서 네임 스페이스 모델을 참조하는 방법은 무엇입니까?

  23. 23

    네임 스페이스가있는 System.Xml.XmlDocument.SelectNodes를 사용하여 자식 노드에 액세스하는 구문은 무엇입니까?

  24. 24

    Typescript에서 'ts (2709) 유형으로 네임 스페이스를 사용할 수 없음'을 수정하는 방법은 무엇입니까?

  25. 25

    파일간에 네임 스페이스를 사용하는 방법은 무엇입니까?

  26. 26

    네임 스페이스 정보를 포함하여 XML 요소를 만드는 방법은 무엇입니까?

  27. 27

    한 네임 스페이스에서 다른 네임 스페이스로 프로세스를 이동하는 방법은 무엇입니까?

  28. 28

    SAX 파서로 네임 스페이스를 처리하는 방법은 무엇입니까?

  29. 29

    Ruby에서 네임 스페이스 클래스를 정의 해제하는 방법은 무엇입니까?

뜨겁다태그

보관