데이터베이스 쿼리에서 XML로 데이터를 내보내는 방법


소개하다.
Extensible Markup Language (XML)는 20여 년 동안 존재해 왔다.XML은 사용자가 읽을 수 있는 형식으로 문서를 인코딩하는 데 사용되는 태그 언어입니다.XML에서 사용자 정의 태그, 요소 및 속성을 정의하여 특정 요구 사항을 충족할 수 있습니다.XML은 대소문자를 구분하고 주석을 허용하며 차원 구조가 중요하다.XML 파일은 텍스트 파일이며 모든 텍스트 편집기에서 열 수 있습니다.다음은 XML 문서의 예입니다.
<!-- sample comment -->
<Customers> <!-- root element -->
  <Customer>  <!-- nested element -->
    <FirstName>Helena</FirstName>
  </Customer>
  <Customer>
  ...
  </Customer>
  ...
</Customers>
관계 데이터베이스 테이블에 대한 조회를 실행할 때 결과 데이터는 주로 표 형식으로 표시됩니다.각 수평 행은 레코드를 나타내고 열은 수직으로 이동하며 레코드의 등록 정보를 나타냅니다.
본고에서 나는 어떻게 MS SQL Server와PostgreSQL 데이터베이스를 조회하여 표 형식이 아닌 XML 형식으로 데이터를 출력하는지 연구하고자 한다.각 데이터베이스에는 출력 XML의 내장 기능이 있습니다.또한 쿼리를 수동으로 작성하여 XML 요소와 데이터베이스에 있는 데이터를 결합시켜 XML 출력을 만들 수 있습니다.수동으로 만든 XML 출력은 지루하고 지루하며 루트 요소가 부족하기 때문에 맞지 않습니다 well formed xml document.

수동으로 XML 만들기
본고에서 사용한 샘플 데이터는 가설적인customers표에서 나온 것으로 그 구조와 샘플 데이터는 다음과 같다.
신분증
성함
성.
도시.
컨디션
1
프랑소바
트렘브레
몬트리올
품질 제어
2
비욘세
한삼
오슬로

헬렌나
활용단어참조
프라하
4
페르난다
라모스
브라질리아
DF
customers라는 파일을 만듭니다.xml, 선택한 텍스트 편집기로 엽니다.
파일에 루트 요소를 만들면 다음 컨텐트를 파일에 삽입하여 올바른 형식의 XML 문서가 됩니다.
<Customers>

</Customers>
데이터 열을 XML 요소에 포함시켜 데이터 조회를 결합합니다.CONCAT() 함수를 사용하여 XML 요소와 데이터를 결합합니다.MS SQL Server와 PostgreSQL은 모두 CONCAT() 함수를 지원합니다.COALESCE() 함수를 사용하여 빈 값을 빈 문자열로 바꿉니다.
SELECT CONCAT(
   '<Customer>',
      '<Id>', id, '</Id>',
      '<FirstName>', first_name, '</FirstName>',
      '<LastName>', last_name, '</LastName>',
      '<City>', COALESCE(city, ''), '</City>',
      '<State>', COALESCE(state, ''), '</State>',
   '</Customer>') customers_xml
 FROM customers LIMIT 2;
질의를 실행하고 결과를 선택하여 작성한 XML 파일의 시작과 끝 루트 요소 간에 복사하여 붙여넣습니다.
<Customers>
  <Customer><Id>1</Id><FirstName>François</FirstName><LastName>Tremblay</LastName><City>Montreal</City><State>QC</State></Customer>
  <Customer><Id>2</Id><FirstName>Bjørn</FirstName><LastName>Hansen</LastName><City>Oslo</City><State></State></Customer>
</Customers>
XML 파일을 저장합니다.
SQL Fiddle

데이터베이스 내장 함수를 사용하여 XML 내보내기

PostgreSQL
PostgreSQL에는 XML 형식으로 데이터를 표시하는 함수query_to_xml(query text, nulls boolean, tableforest boolean, targetns text)가 있습니다.query_to_xml 함수에는 4개의 매개변수가 필요합니다.
  • query - 실제 SQL 질의가 텍스트입니다.
  • nulls - 빈 값이 있는 If 요소를 포함해야 합니다.이 값이false이면 XML 요소를 생성할 때 XML 문서에서null 값이 있는 열이 무시됩니다.매개 변수의 진짜 값은 <columnname xsi:nil="true"/> 속성을 포함하는 자동 닫기 요소를 출력합니다.
  • tableforest - 각 행을 다른 XML 문서에 배치합니다.이것은 모든 검색 데이터 줄이row 루트 요소에 포장된다는 것을 의미합니다.
  • targetns - 결과를 넣을 이름 공간입니다.기본 이름 공간을 사용하기 위해 공백 문자열을 전달합니다.
  • 질의를 실행하면 테이블 태그는 루트 요소로 표시되고 행 태그는 데이터의 각 행에 설정됩니다.그런 다음 원하는 태그 이름을 사용하여 테이블과 행 태그를 업데이트할 수 있습니다.
    샘플 테이블을 사용하여 다음과 같은 컨텐트를 사용하여 XML을 생성합니다.
    SELECT query_to_xml(
        'SELECT t.id "Id"
         , t.first_name "FirstName"
         , t.last_name "LastName"
         , t.city "City"
         , t.state "State"
        FROM customers t LIMIT 2', true , false, '')
    
    이 기능을 실행한 후 출력은 다음과 같습니다.
    <table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <row>
        <Id>1</Id>
        <FirstName>François</FirstName>
        <LastName>Tremblay</LastName>
        <City>Montreal</City>
        <State>QC</State>
      </row>
      <row>
        <Id>2</Id>
        <FirstName>Bjørn</FirstName>
        <LastName>Hansen</LastName>
        <City>Oslo</City>
        <State xsi:nil="true"/>
      </row>
    </table>
    
    SQL Fiddle
    XML 출력을 선택하고 복사합니다.
    customers라는 파일을 만듭니다.그런 다음 텍스트 편집기로 파일을 엽니다.
    위에서 복사한 내용을 파일에 붙여넣고 테이블을 Customers로 바꾸고 줄을 Customer로 바꾸고 파일을 저장합니다.
    XML 문서에 XML 모드를 포함하려면 함수 대신 query_to_xml_and_xmlschema 함수를 사용합니다.
    COPY 함수를 사용하여 다음 구문을 사용하여 XML 출력을 파일로 직접 복사할 수 있습니다.
    COPY(
      SELECT query_to_xml(
          'SELECT t.id "Id"
          , t.first_name "FirstName"
          , t.last_name "LastName"
          , t.city "City"
          , t.state "State"
          FROM customers t', true , false, '')
    ) TO '~/tmp/customers.xml'
    
    COPY 명령에는 제한된 파일 액세스와 사용자 권한이 있습니다.명령을 실행하려면 명령을 실행하는 사용자가 수퍼유저 또는 pg write server 파일의 멤버여야 합니다.그러나 서버 파일 시스템의 모든 파일에 접근할 수 있기 때문에 사용자에게 이러한 역할 중 하나를 부여할 때 매우 조심해야 한다.

    SQL Server
    SQL Server는 select 쿼리에서 FOR XML 자문을 사용하여 쿼리 결과를 XML 출력으로 변환합니다.
    SELECT TOP 2
      id Id
      ,first_name FirstName
      ,last_name LastName
      ,city City
      ,COALESCE(state, '') State
    FROM customers
    FOR XML PATH('Customer'), ROOT('Customers')
    
    값이 없을 때 XML 출력에서 무시되지 않도록 COALESCE() 함수에 빈 열을 모두 포함해야 합니다.
    SQL Server의 장점은 선택한 XML 모드를 기반으로 루트 및 객체 노드 요소를 사용자 정의할 수 있다는 것입니다.다음은 위의 질의를 실행한 후의 출력입니다.
    <Customers>
      <Customer>
        <Id>1</Id>
        <FirstName>François</FirstName>
        <LastName>Tremblay</LastName>
        <City>Montreal</City>
        <State>QC</State>
      </Customer>
      <Customer>
        <Id>2</Id>
        <FirstName>Bjørn</FirstName>
        <LastName>Hansen</LastName>
        <City>Oslo</City>
        <State></State>
      </Customer>
    </Customers>
    
    SQL Fiddle
    XML 출력을 선택하고 복사합니다.
    customers라는 파일을 만듭니다.그런 다음 텍스트 편집기로 파일을 엽니다.
    위에서 복사한 내용을 파일에 붙여넣고 저장합니다.
    bulk copy program utility (bcp)를 사용하여 xml 파일을 만들 수 있습니다.bcp 유틸리티는 데이터 파일에서 데이터를 가져오거나 내보낼 수 있습니다.
    다음 명령은 bcp 유틸리티를 사용하여 샘플 데이터에서 XML 파일을 만듭니다.
    bcp "SELECT TOP 2
      id Id
      ,first_name FirstName
      ,last_name LastName
      ,city City
      ,COALESCE(state, '') State
    FROM customers
    FOR XML PATH('Customer'), ROOT('Customers')" queryout ~/Documents/customers.xml -S localhost -d testdb  -c -U sa
    
  • query_to_xml 연결할 SQL Server 인스턴스 지정
  • -S 연결할 데이터베이스
  • -d 필드당 프롬프트 없이 문자 데이터 형식으로 작업 수행
  • -c SQL Server
  • 연결에 사용할 로그인 ID 지정

    요약
    본고에서 우리는 PostgreSQl과 MS SQL Server 데이터베이스 조회에서 XML 데이터를 만드는 여러 가지 사용 가능한 옵션을 연구했다.XML 데이터를 수동으로 생성하는 옵션과 데이터베이스에 포함된 내장 함수를 사용하는 옵션이 있습니다.PostgreSQL COPY 명령 또는 SQL Server bcp 유틸리티를 사용하여 XML 데이터 파일을 출력할 수도 있습니다.

    리소스
  • XML Functions
  • FOR XML (SQL Server)
  • 좋은 웹페이지 즐겨찾기