2025 년 7 월 17 일 : | 배트맨 토토 18 베타 2 릴리스!
이 배트맨 토토는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다4CL2토토 캔CL29버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.45. XML2

theXML2모듈은 XPath 쿼리 및 XSLT 기능을 제공합니다.

F.45.1. 감가 상각 통지

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

F.45.2. 기능 설명

테이블 F.34이 모듈에서 제공 한 함수를 보여줍니다. 이러한 기능은 간단한 XML 구문 분석 및 XPath 쿼리를 제공합니다. 모든 인수는 유형입니다텍스트

표 F.34. 기능

function 반환 설명
xml_valid (배트맨 토토) bool

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

xpath_string (배트맨 토토, 쿼리) 텍스트

이 함수는 제공된 배트맨 토토의 XPath 쿼리를 평가하고 결과를 지정된 유형으로 시전합니다.

xpath_number (배트맨 토토, 쿼리) float4
xpath_bool (배트맨 토토, 쿼리) bool
xpath_nodeset (배트맨 토토, 쿼리, TopTag, ItemTag) 텍스트

이것은 배트맨 토토의 쿼리를 평가하고 결과를 XML 태그로 랩합니다. 결과가 다수 인 경우 출력은 다음과 같습니다.

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

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

xpath_nodeset (배트맨 토토, 쿼리) 텍스트

Likexpath_nodeset (배트맨 토토, 쿼리, TopTag, ItemTag)그러나 결과는 두 태그를 모두 생략합니다.

xpath_nodeset (배트맨 토토, 쿼리, ItemTag) 텍스트

Likexpath_nodeset (배트맨 토토, 쿼리, TopTag, ItemTag)그러나 결과는 생략Toptag.

xpath_list (배트맨 토토, 쿼리, 분리기) 텍스트

이 함수는 지정된 분리기에 의해 분리 된 여러 값을 반환합니다 (예 :값 1, 값 2, 값 3분리기 인 경우,.

xpath_list (배트맨 토토, 쿼리) 텍스트 이것은 위의 함수를위한 래퍼입니다,분리기로

F.45.3. xpath_table

xpath_table (텍스트 키, 텍스트 배트맨 토토, 텍스트 관계, 텍스트 xpaths, 텍스트 기준)을 반환합니다.

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

표 F.35. xpath_table매개 변수

매개 변수 설명

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

배트맨 토토

XML 배트맨 토토를 포함하는 필드의 이름

관계

배트맨 토토가 포함 된 표 또는보기의 이름

xpaths

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

기준

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


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

<key, <concection에서 <songy <songy <crinciteria 선택

따라서 해당 매개 변수가 될 수 있습니다무엇이든해당 특정 위치에서 유효합니다. 이 선택의 결과는 정확히 두 개의 열을 반환해야합니다 (키 또는 배트맨 토토에 대한 여러 필드를 나열하지 않는 한). 이 단순한 접근 방식은 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.45.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.45.4. XSLT 함수

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

F.45.4.1. XSLT_PROCESS

XSLT_PROCESS (텍스트 배트맨 토토, 텍스트 스타일 시트, 텍스트 매개 변수) 텍스트를 반환

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

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

F.45.5. 작가

John Grey

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