이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다4CL2토토 캔CL29버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.50. XML2 - XPATH 토토 베이 및 XSLT 기능#

theXML2모듈은 XPath 토토 베이 및 XSLT 기능을 제공합니다.

F.50.1. 감가 상각 통지#

FromPostgreSQL8.3 on on, 핵심 서버의 SQL/XML 표준을 기반으로 XML 관련 기능이 있습니다. 이 기능은 XML 구문 검사 및 XPath 토토 베이를 다룹니다.이 모듈은이 모듈 등이지만 API는 전혀 호환되지 않습니다. 이 모듈은 새로운 표준 API를 선호하여 향후 버전의 PostgreSQL에서 제거 될 예정이므로 응용 프로그램을 변환하는 것이 좋습니다. 이 모듈의 일부 기능이 최신 API와 적절한 형태로 제공되지 않는 경우 문제를 설명하십시오.부족을 해결할 수 있도록.

F.50.2. 기능 설명#

테이블 F.37이 모듈에서 제공 한 함수를 보여줍니다. 이러한 기능은 간단한 XML 파싱 및 XPath 토토 베이를 제공합니다.

표 F.37. XML2기능

기능

설명

xml_valid(문서 텍스트) →부울

주어진 문서를 구문 분석하고 문서가 잘 형성된 XML 인 경우 true를 반환합니다. (참고 : 이것은 표준 postgresql 함수의 별칭입니다xml_is_well_formed (). 이름xml_valid ()유효성과 잘 형성성이 XML에서 다른 의미를 갖기 때문에 기술적으로 부정확합니다.)

xpath_string(문서 텍스트, 토토 베이 텍스트) →텍스트

제공된 문서의 XPath 토토 베이를 평가하고 결과를텍스트.

xpath_number(문서 텍스트, 토토 베이 텍스트) →Real

제공된 문서의 XPath 토토 베이를 평가하고 결과를Real.

xpath_bool(문서 텍스트, 토토 베이 텍스트) →부울

제공된 문서의 XPath 토토 베이를 평가하고 결과를부울.

xpath_nodeset(문서 텍스트, 토토 베이 텍스트, Toptag 텍스트, ItemTag 텍스트) →텍스트

문서의 토토 베이를 평가하고 결과를 XML 태그로 랩합니다. 결과가 다수 인 경우 출력은 다음과 같습니다.

<poptag
XML 조각 일 수있는 <Ittag 값 1 </itemtag
<Ittag value 2 .... </itemtag
</toptag

IF 중Toptag또는ItemTag| 빈 문자열이며 관련 태그는 생략됩니다.

xpath_nodeset(Document 텍스트, 토토 베이 텍스트, ItemTag 텍스트) →텍스트

Likexpath_nodeset (문서, 토토 베이, TopTag, ItemTag)그러나 결과는 생략Toptag.

xpath_nodeset(문서 텍스트, 토토 베이 텍스트) →텍스트

좋아요xpath_nodeset (문서, 토토 베이, TopTag, ItemTag)그러나 결과는 두 태그를 모두 생략합니다.

xpath_list(문서 텍스트, 토토 베이 텍스트, 분리기 텍스트) →텍스트

문서의 토토 베이를 평가하고 지정된 분리기에 의해 분리 된 여러 값을 반환합니다 (예 :값 1, 값 2, 값 3if분리기is,.

xpath_list(문서 텍스트, 토토 베이 텍스트) →텍스트

이것은 위의 함수를위한 래퍼입니다,분리기로


F.50.3. xpath_table #

xpath_table (텍스트 키, 텍스트 문서, 텍스트 관계, 텍스트 xpaths, 텍스트 기준)을 반환 record

xpath_table는 각 문서 세트에서 XPath 토토 베이 세트를 평가하고 결과를 테이블로 반환하는 테이블 함수입니다. 원본 문서 테이블의 기본 키 필드는 결과 세트를 조인에 쉽게 사용할 수 있도록 결과의 첫 번째 열로 리턴합니다. 매개 변수는에 설명되어 있습니다.테이블 F.38.

표 F.38. xpath_table매개 변수

매개 변수 설명

이름의 이름필드 - 이것은 출력 테이블의 첫 번째 열로 사용될 필드 일뿐입니다.

문서

XML 문서를 포함하는 필드의 이름

관계

문서가 포함 된 테이블 또는보기의 이름

xpaths

하나 이상의 XPath 표현식, 분리|

기준

WHERE 절의 내용. 이것은 생략 할 수 없으므로 사용true또는1 = 1관계에서 모든 행을 처리하려면


이 매개 변수 (XPath 문자열 제외)는 일반 SQL Select 문으로 대체되므로 약간의 유연성이 있습니다. 진술은입니다.

<key, <concection에서 <songy <criteria를 선택하십시오.

따라서 해당 매개 변수가 될 수 있습니다무엇이든해당 특정 위치에서 유효합니다. 이 선택의 결과는 정확히 두 개의 열을 반환해야합니다 (키 또는 문서에 대한 여러 필드를 나열하지 않는 한). 이 단순한 접근 방식은 SQL 주입 공격을 피하기 위해 사용자가 제공 한 값을 검증해야한다고 조심하십시오.

함수는 a에서 사용해야합니다.From표현,as출력 열을 지정하려는 조항; 예를 들어

선택 *에서
xpath_table ( 'article_id',
            'article_xml',
            '조항',
            '/기사/저자 |/기사/페이지 |/기사/제목',
            'date_entered' ''2003-01-01 '' ')
as t (article_id 정수, 저자 텍스트, page_count 정수, 제목 텍스트);

theas절은 출력 테이블의 열의 이름과 유형을 정의합니다. 첫 번째는입니다.필드와 나머지는 XPath 토토 베이에 해당합니다. 결과 열보다 XPath 토토 베이가 더 있으면 추가 토토 베이가 무시됩니다. xpath 토토 베이보다 결과 열이 더 많으면 추가 열이 null입니다.

이 예제는를 정의한다는 것을 알 수 있습니다.page_count정수로서의 결과 열. 이 함수는 내부적으로 문자열 표현을 다루므로 출력에서 정수를 원한다고 말하면 XPath 결과의 문자열 표현을 사용하여 PostgreSQL 입력 함수를 사용하여 정수 (또는 모든 유형으로 변환합니다.as조항 요청). 이 작업을 수행 할 수없는 경우 오류가 발생합니다 (예 : 결과가 비어있는 경우).텍스트데이터가 문제가 있다고 생각하면 열 유형으로 |

전화select진술은 반드시 정당 할 필요는 없습니다선택 *- 이름으로 출력 열을 참조하거나 다른 테이블에 가입 할 수 있습니다. 이 기능은 원하는 작업 (예 : 집계, 결합, 정렬 등)을 수행 할 수있는 가상 테이블을 생성합니다. 그래서 우리는 또한 가질 수 있습니다 :

T.Title, P.FullName, P.Email을 선택하십시오
xpath_table에서 ( 'article_id', 'article_xml', 'articles',
                 '/기사/제목 |/article/author/@id',
                 'xpath_string (article_xml,' '/article/@date' ')' '2003-03-20' '')
       t (article_id 정수, 제목 텍스트, author_id 정수),
     p
여기서 t.author_id = p.person_id;

더 복잡한 예로. 물론 편의를 위해이 모든 것을 감상 할 수 있습니다.

F.50.3.1. 다중 결과#

thexpath_table함수는 각 XPATH 토토 베이의 결과가 다중 자리화 될 수 있다고 가정하므로 함수에 의해 반환 된 행 수는 입력 문서 수와 다를 수 없습니다. 반환 된 첫 번째 행에는 각 토토 베이의 첫 번째 결과가 포함되어 있고 두 번째 행은 각 토토 베이의 결과입니다. 토토 베이 중 하나가 다른 값보다 값이 적은 경우 NULL 값이 대신 반환됩니다.

경우에 따라, 사용자는 주어진 XPath 토토 베이가 단일 결과 만 리턴한다는 것을 알게됩니다 (아마도 고유 한 문서 식별자)-XPath 토토 베이와 함께 사용하면 여러 결과를 반환하면 단일 값 결과는 결과의 첫 번째 행에만 나타납니다. 이에 대한 해결책은 키 필드를 더 간단한 XPath 토토 베이에 대한 조인의 일부로 사용하는 것입니다. 예를 들어 :

테이블 테스트 생성 (
    ID int 기본 키,
    XML 텍스트
);

테스트 값 (1, '<doc num = "c1"에 삽입하십시오
<line num = "l1" <a 1 </a <b 2 </b <c 3 </c </line
<line num = "l2" <a 11 </a <b 22 </b <c 33 </c </line
</doc ');

테스트 값 (2, '<doc num = "c2"에 삽입하십시오
<line num = "l1" <a 111 </a <b 222 </b <c 333 </c </line
<line num = "l2" <a 111 </a <b 222 </b <c 333 </c </line
</doc ');

*에서 선택하십시오
  xpath_table ( 'id', 'xml', 'test',
              '/doc/num |/doc/line/@num |/doc/line/a |/doc/line/b |/doc/line/c',
              '진실')
  A로 t (id int, doc_num varchar (10), line_num varchar (10), val1 int, val2 int, val3 int)
여기서 id = 1 Doc_num, line_num의 주문

 id | doc_num | line_num | val1 | Val2 | Val3
----+--------+----------+------+------+------
  1 | C1 | L1 |    1 |    2 |    3
  1 |         | L2 |   11 |   22 |   33

getdoc_num모든 라인에서 솔루션은의 두 개의 호출을 사용하는 것입니다.xpath_table결과에 참여하십시오 :

select t.*, i.doc_num from
  xpath_table ( 'id', 'xml', 'test',
              '/doc/line/@num |/doc/line/a |/doc/line/b |/doc/line/c',
              '진실')
    t (Id int, line_num varchar (10), Val1 Int, Val2 int, Val3 Int),
  xpath_table ( 'id', 'xml', 'test', '/doc/@num', 'true')))
    I로 (ID int, doc_num varchar (10))
여기서 i.id = t.id 및 i.id = 1
doc_num, line_num의 주문;

 id | line_num | val1 | Val2 | val3 | doc_num
----+----------+------+------+------+-------
  1 | L1 |    1 |    2 |    3 | C1
  1 | L2 |   11 |   22 |   33 | C1
(2 줄)

F.50.4. XSLT 함수#

libxslt가 설치된 경우 다음 기능을 사용할 수 있습니다.

F.50.4.1. XSLT_PROCESS #

XSLT_PROCESS (텍스트 문서, 텍스트 스타일 시트, 텍스트 매개 변수) 텍스트를 반환

이 함수는 XSL 스타일 시트를 문서에 적용하고 변환 된 결과를 반환합니다. 그만큼Paramlist형식에 지정된 변환에 사용할 매개 변수 할당 목록입니다.a = 1, b = 2. 매개 변수 구문 분석은 매우 간단합니다. 매개 변수 값은 쉼표를 포함 할 수 없습니다!

2 파라미터 버전의도 있습니다.XSLT_PROCESS변환에 매개 변수를 전달하지 않습니다.

F.50.5. 작가#

John Grey

이 모듈의 개발은 Torchbox Ltd. (www.torchbox.com)가 후원했습니다. Postgresql과 동일한 BSD 라이센스가 있습니다.