theXML2
모듈은 XPath 쿼리 및 XSLT 기능을 제공합니다.
From토토 캔8.3 on on, 핵심 서버의 SQL/XML 표준을 기반으로 XML 관련 기능이 있습니다. 이 기능은 XML 구문 검사 및 XPath 쿼리를 다룹니다.이 모듈은이 모듈 등이지만 API는 전혀 호환되지 않습니다. 이 모듈은 새로운 표준 API를 선호하여 향후 버전의 토토 캔에서 제거 될 예정이므로 응용 프로그램을 변환하는 것이 좋습니다. 이 모듈의 일부 기능이 최신 API와 적절한 형태로 제공되지 않는 경우 문제를 설명하십시오.<pgsql-hackers@lists.토토 캔.org
부족을 해결할 수 있도록.
테이블 F.35이 모듈에서 제공 한 함수를 보여줍니다. 이러한 기능은 간단한 XML 파싱 및 XPath 쿼리를 제공합니다.
표 F.35. XML2
기능
기능 설명 |
---|
주어진 문서를 구문 분석하고 문서가 잘 형성된 XML 인 경우 true를 반환합니다. (참고 : 이것은 표준 토토 캔 함수의 별칭입니다 |
제공된 토토 캔의 XPath 쿼리를 평가하고 결과를 |
제공된 토토 캔의 XPath 쿼리를 평가하고 결과를 |
제공된 토토 캔의 XPath 쿼리를 평가하고 결과를 |
토토 캔의 쿼리를 평가하고 결과를 XML 태그로 랩합니다. 결과가 다수 인 경우 출력은 다음과 같습니다. <poptag XML 조각 일 수있는 <Ittag 값 1 </itemtag <Ittag value 2 .... </itemtag </toptag
|
좋아요 |
좋아요 |
토토 캔의 쿼리를 평가하고 지정된 분리기에 의해 분리 된 여러 값을 반환합니다 (예 : |
이것은 위의 함수를위한 래퍼입니다 |
xpath_table
xpath_table (텍스트 키, 텍스트 토토 캔, 텍스트 관계, 텍스트 xpaths, 텍스트 기준)을 반환합니다.
xpath_table
는 각 토토 캔 세트에서 XPATH 쿼리 세트를 평가하고 결과를 테이블로 반환하는 테이블 함수입니다. 원본 토토 캔 테이블의 기본 키 필드는 결과 세트를 조인에 쉽게 사용할 수 있도록 결과의 첫 번째 열로 리턴됩니다. 매개 변수는에 설명되어 있습니다.테이블 F.36.
표 F.36. xpath_table
매개 변수
매개 변수 | 설명 |
---|---|
키 |
이름의 이름“키”필드 - 이것은 출력 테이블의 첫 번째 열로 사용되는 필드 일뿐입니다. |
Document |
XML 토토 캔를 포함하는 필드의 이름 |
관계 |
토토 캔가 포함 된 표 또는보기의 이름 |
xpaths |
하나 이상의 xpath 표현식, 분리 |
기준 |
WHERE 절의 내용. 이것은 생략 할 수 없으므로 사용 |
이 매개 변수 (XPath 문자열 제외)는 일반 SQL Select 문으로 대체되므로 약간의 유연성이 있습니다. 진술은입니다.
<key, <cologe에서 <songey <relation <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 결과의 문자열 표현을 사용하여 토토 캔 입력 함수를 사용하여 정수 (또는 모든 유형으로 변환합니다.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;
더 복잡한 예로. 물론 편의를 위해이 모든 것을 감상 할 수 있습니다.
thexpath_table
함수는 각 XPATH 쿼리의 결과가 다수화 될 수 있다고 가정하므로 함수에 의해 반환 된 행의 수는 입력 토토 캔 수와 같지 않을 수 있습니다. 반환 된 첫 번째 행에는 각 쿼리의 첫 번째 결과가 포함되어 있고 두 번째 행은 각 쿼리의 결과입니다. 쿼리 중 하나가 다른 값보다 값이 적은 경우 NULL 값이 대신 반환됩니다.
경우에 따라, 사용자는 주어진 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 줄)
libxslt가 설치된 경우 다음 기능을 사용할 수 있습니다.
John Grey<jgray@azuli.co.uk
이 모듈의 개발은 Torchbox Ltd. (www.torchbox.com)가 후원했습니다. 토토 캔과 동일한 BSD 라이센스가 있습니다.
토토 캔에 맞지 않는 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식토토 캔 문제를보고하려면