F.48. xml2 — XPath 쿼리 및 XSLT 기능#

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

F.48.1. 지원 중단 알림#

발신PostgreSQL8.3 on, 코어 서버에는 SQL/XML 표준을 기반으로 하는 XML 관련 기능이 있습니다. 해당 기능에는 이 모듈이 수행하는 작업인 XML 구문 검사 및 XPath 쿼리 등이 포함되지만 API는 전혀 호환되지 않습니다. 이 모듈은 최신 표준 API를 위해 PostgreSQL의 향후 버전에서 제거될 예정이므로 애플리케이션을 변환해 보는 것이 좋습니다. 이 모듈의 일부 기능을 최신 API에서 적절한 형식으로 사용할 수 없는 경우 문제를 설명해주세요.결핍이 해결될 수 있도록.

F.48.2. 기능 설명#

표 F.35이 모듈에서 제공하는 기능을 보여줍니다. 이러한 함수는 간단한 XML 구문 분석 및 XPath 쿼리를 제공합니다.

표 F.35. xml2기능

기능

설명

xml_valid ( 토토 꽁 머니 텍스트 ) → 부울

주어진 토토 꽁 머니를 분석하고 토토 꽁 머니가 올바른 형식의 XML이면 true를 반환합니다. (참고: 이는 표준 PostgreSQL 함수의 별칭입니다.xml_is_well_formed(). 이름xml_valid()타당성과 올바른 형식은 XML에서 서로 다른 의미를 갖기 때문에 기술적으로 올바르지 않습니다.)

xpath_string ( 토토 꽁 머니 텍스트, 질의 텍스트 ) → 텍스트

제공된 토토 꽁 머니에 대한 XPath 쿼리를 평가하고 결과를 다음으로 변환합니다.텍스트.

xpath_number ( 토토 꽁 머니 텍스트, 질의 텍스트 ) → 진짜

제공된 토토 꽁 머니에 대한 XPath 쿼리를 평가하고 결과를 다음으로 변환합니다.실제.

xpath_bool ( 토토 꽁 머니 텍스트, 질의 텍스트 ) → 부울

제공된 토토 꽁 머니에 대한 XPath 쿼리를 평가하고 결과를 다음으로 변환합니다.부울.

xpath_nodeset ( 토토 꽁 머니 텍스트, 질의 텍스트, 상위 태그 텍스트, 항목태그 텍스트 ) → 텍스트

토토 꽁 머니에 대한 쿼리를 평가하고 결과를 XML 태그로 래핑합니다. 결과가 다중값인 경우 출력은 다음과 같습니다.

<상위 태그
<itemtagXML 조각일 수 있는 값 1</itemtag
<itemtag값 2....</itemtag
</toptag

둘 중 하나라면상위 태그또는항목태그빈 문자열이므로 해당 태그는 생략됩니다.

xpath_nodeset ( 토토 꽁 머니 텍스트, 질의 텍스트, 항목태그 텍스트 ) → 텍스트

좋아요xpath_nodeset(토토 꽁 머니, 쿼리, toptag, itemtag)그러나 결과는 생략됨상위 태그.

xpath_nodeset ( 토토 꽁 머니 텍스트, 질의 텍스트 ) → 텍스트

좋아요xpath_nodeset(토토 꽁 머니, 쿼리, toptag, itemtag)그러나 결과에는 두 태그가 모두 생략되었습니다.

xpath_list ( 토토 꽁 머니 텍스트, 질의 텍스트, 구분자 텍스트 ) → 텍스트

토토 꽁 머니에 대한 쿼리를 평가하고 지정된 구분 기호로 구분된 여러 값을 반환합니다. 예를 들어값 1,값 2,값 3if구분자is,.

xpath_list ( 토토 꽁 머니 텍스트, 질의 텍스트 ) → 텍스트

이것은 다음을 사용하는 위 함수에 대한 래퍼입니다.,구분자로.


F.48.3. xpath_table #

xpath_table(텍스트 키, 텍스트 토토 꽁 머니, 텍스트 관계, 텍스트 xpath, 텍스트 기준)은 레코드 집합을 반환합니다.

xpath_table은 각 토토 꽁 머니 집합에 대한 XPath 쿼리 집합을 평가하고 결과를 테이블로 반환하는 테이블 함수입니다. 원본 토토 꽁 머니 테이블의 기본 키 필드는 결과의 첫 번째 열로 반환되므로 결과 집합을 조인에 쉽게 사용할 수 있습니다. 매개변수는 다음에 설명되어 있습니다.표 F.36.

표 F.36. xpath_table매개변수

매개변수 설명

이름필드 - 이는 출력 테이블의 첫 번째 열로 사용되는 필드입니다. 즉, 각 출력 행의 출처 레코드를 식별합니다(여러 값에 대한 아래 참고 사항 참조).

토토 꽁 머니

XML 토토 꽁 머니가 포함된 필드의 이름

관계

토토 꽁 머니가 포함된 테이블 또는 뷰의 이름

xpaths

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

기준

WHERE 절의 내용. 생략할 수 없으므로 를 사용하세요.또는1=1관계의 모든 행을 처리하려는 경우


이러한 매개변수(XPath 문자열 제외)는 일반 SQL SELECT 문으로 대체되므로 유연성이 있습니다. 문은 다음과 같습니다.

SELECT <키, <토토 꽁 머니 FROM <관계 WHERE <기준

그러므로 해당 매개변수는 다음과 같습니다무엇이든해당 특정 위치에서 유효합니다. 이 SELECT의 결과는 정확히 두 개의 열을 반환해야 합니다(키 또는 토토 꽁 머니에 대해 여러 필드를 나열하려고 시도하지 않는 한 반환됩니다). 이 단순한 접근 방식을 사용하려면 SQL 삽입 공격을 방지하기 위해 사용자가 제공한 값의 유효성을 검사해야 합니다.

함수는 다음에서 사용되어야 합니다.발신표현식,AS절은 출력 열을 지정합니다. 예를 들어

SELECT * FROM
xpath_table('article_id',
            'article_xml',
            '기사',
            '/기사/저자|/기사/페이지|/기사/제목',
            '입력한 날짜  ''2003-01-01'' ')
AS t(article_id 정수, 작성자 텍스트, 페이지 수 정수, 제목 텍스트);

AS절은 출력 테이블의 열 이름과 유형을 정의합니다. 첫 번째는필드와 나머지는 XPath 쿼리에 해당합니다. 결과 열보다 XPath 쿼리가 더 많은 경우 추가 쿼리는 무시됩니다. XPath 쿼리보다 결과 열이 더 많은 경우 추가 열은 NULL이 됩니다.

이 예는 다음을 정의합니다.page_count결과 열을 정수로 표시합니다. 함수는 내부적으로 문자열 표현을 처리하므로 출력에 정수를 원한다고 말하면 XPath 결과의 문자열 표현을 취하고 PostgreSQL 입력 함수를 사용하여 이를 정수(또는 어떤 유형이든)로 변환합니다.AS절 요청). 이를 수행할 수 없으면 오류가 발생합니다(예: 결과가 비어 있는 경우). 따라서 계속 진행하는 것이 좋습니다.텍스트데이터에 문제가 있다고 생각되면 열 유형으로 사용하세요.

소명선택진술은 반드시 정당할 필요는 없습니다선택 *— 출력 열을 이름으로 참조하거나 다른 테이블에 조인할 수 있습니다. 이 함수는 원하는 작업(예: 집계, 조인, 정렬 등)을 수행할 수 있는 가상 테이블을 생성합니다. 따라서 다음도 가질 수 있습니다.

SELECT t.title, p.fullname, p.email
FROM xpath_table('article_id', 'article_xml', 'articles',
                 '/기사/제목|/기사/저자/@id',
                 'xpath_string(article_xml,''/article/@date'')  ''2003-03-20'' ')
       AS t(article_id 정수, 제목 텍스트, 작성자_id 정수),
     tblPeopleInfo AS p
t.author_id = p.person_id;

더 복잡한 예입니다. 물론 편의를 위해 이 모든 것을 뷰에 래핑할 수 있습니다.

F.48.3.1. 다중값 결과#

xpath_table함수는 각 XPath 쿼리의 결과가 다중 값일 수 있다고 가정하므로 함수에서 반환된 행 수가 입력 토토 꽁 머니 수와 동일하지 않을 수 있습니다. 반환된 첫 번째 행에는 각 쿼리의 첫 번째 결과가 포함되고, 두 번째 행에는 각 쿼리의 두 번째 결과가 포함됩니다. 쿼리 중 하나의 값이 다른 쿼리보다 적으면 대신 null 값이 반환됩니다.

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

CREATE TABLE 테스트(
    ID int 기본 키,
    XML 텍스트
);

테스트 값에 삽입(1, '<doc num="C1"
<line num="L1"<a1</a<b2</b<c3</c</line
<line num="L2"<a11</a<b22</b<c33</c</line
</doc');

테스트 값에 삽입(2, '<doc num="C2"
<line num="L1"<a111</a<b222</b<c333</c</line
<line num="L2"<a111</a<b222</b<c333</c</line
</doc');

선택 *에서
  xpath_table('id','xml','테스트',
              '/doc/@num|/doc/line/@num|/doc/line/a|/doc/line/b|/doc/line/c',
              '사실')
  AS t(id int, doc_num varchar(10), line_num varchar(10), val1 int, val2 int, val3 int)
WHERE id = 1 ORDER BY doc_num, line_num

 아이디 | 토토 꽁 머니_번호 | 라인_번호 | 발1 | 발2 | 발3
----+---------+---------+------+------+------
  1 | C1 | L1 |    1 |    2 |    3
  1 |         | L2 |   11 |   22 |   33

얻으려면doc_num모든 줄에서 해결책은 두 번의 호출을 사용하는 것입니다.xpath_table그리고 결과에 참여하세요:

다음에서 t.*,i.doc_num 선택
  xpath_table('id', 'xml', '테스트',
              '/doc/line/@num|/doc/line/a|/doc/line/b|/doc/line/c',
              '사실')
    AS t(id int, line_num varchar(10), val1 int, val2 int, val3 int),
  xpath_table('id', 'xml', 'test', '/doc/@num', 'true')
    AS i(id int, doc_num varchar(10))
i.id=t.id AND i.id=1인 경우
ORDER BY doc_num, line_num;

 아이디 | 라인_번호 | 발1 | 발2 | 발3 | 토토 꽁 머니_번호
----+----------+------+------+------+---------
  1 | L1 |    1 |    2 |    3 | C1
  1 | L2 |   11 |   22 |   33 | C1
(2행)

F.48.4. XSLT 함수#

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

F.48.4.1. xslt_process #

xslt_process(text document, text stylesheet, text paramlist)는 텍스트를 반환합니다.

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

다음의 두 매개변수 버전도 있습니다.xslt_process변환에 매개변수를 전달하지 않습니다.

F.48.5. 작성자#

존 그레이

이 모듈의 개발은 Torchbox Ltd.(www.torchbox.com)의 후원을 받았습니다. PostgreSQL과 동일한 BSD 라이센스를 가지고 있습니다.

수정사항 제출

토토 꽁 머니에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식토토 꽁 머니 문제를 보고합니다.