將數據庫中的數據發佈爲XML文檔


將數據庫中的數據發佈爲XML文檔

一,使用XML SPY 工具
 1,在 轉換(C)  中選擇 導入數據庫數據(Import Database 。。。)。
 2,配置數據源。
 3,選擇數據庫表,獲取表中的數據。
  例如Oracle的EMP表
  select EMPNO, ENAME,JOB,MGR,
   to_char(HIREDATE,'yyyy-mm-dd') as HIREDATE, SAL,COMM, DEPTNO
  from emp;
 4,選擇預覽,設置導入。
  (1)匹配數據類型。
  例如Oracle的EMP表中的HIREDATE列。對日期進行格式化。
   to_char(HIREDATE,'yyyy-mm-dd') as HIREDATE,
  (2)配置元素和屬性。
   默認“<>”表示元素。
   “=” 號表示屬性。

二,從Oracle中構建帶標記的 XML 文檔
 
 SQL/XML 是 SQL 語言標準(ANSI/ISO)的擴展,包含將關係數據轉化成 XML 的 XML 發佈函數。
 Oracle包含內置的 SQL/XML 發佈函數,
 這些函數允許在大型字符對象(CLOB 類型,DB2 UDB 的一種內置數據類型)中創建帶標記的 XML 文檔。
 可以使用 SELECT 語句裝配需要的 XML 節點,然後通過把輸出定向到文件而捕捉帶標記的 XML 節點。
 也可使用 INSERT 語句將生成的文本插入表中。
 
 這裏主要介紹xmlelement函數,xmlforest函數,xmlattributes函數,xmlagg函數

 以下示例使用Oracle的EMPA表(Creat Table EMPA as select * from emp;)
 
 1,xmlelement函數:構造一個命名的 XML 元素節點。XMLELEMENT 是一個標量函數。
  參數包括一個元素名、可選的名稱空間聲明、可選的屬性,以及零個或多個組成元素內容的表達式。
  XMLELEMENT 函數可以嵌套。

  
  (1)指定元素內容
  
  示例1:注意參數的不同表現形式
  select xmlelement(NAME 元素名) from empa; --一個沒有內容的元素,一般用於構建枝幹元素,嵌套構建葉子元素。
  
  select xmlelement(NAME 元素名, '元素值') from empa;
  
  select xmlelement(NAME ename, ename) from empa;

  select xmlelement(NAME "ename", ename) from empa;
  
  示例2:注意參數的不同表現形式
  select xmlelement(ename, ename) from empa;

  select xmlelement("ename", ename) from empa;

  示例3:
   select xmlelement(NAME emp, --根元素emp
    xmlelement(ename,ename), --子元素ename
    xmlelement(job,job), --子元素job
    xmlelement(comm,comm) --子元素comm
   ) as xml
  from empa;

  (2)構建有屬性的元素
  示例:
  select xmlelement(emptab,
    xmlelement(emp,
     xmlattributes(empno AS empno,MGR AS MGR,DEPTNO AS DEPTNO),
     xmlelement(NAME ename,xmlattributes(empno AS no), ename),
     xmlelement(job,job),
     xmlelement(COMM,comm)
    )
   ) as xml
  from empa;

 2,xmlforest函數 :構造一個 XML 元素節點序列(森林)。XMLFOREST 是一個標量函數,

  示例1
  select xmlforest(ENAME "ename", JOB "job",
   to_char(HIREDATE,'yyyy-mm-dd') "hiredate", SAL "sal",COMM "comm")
  from empa;

  示例2:
  select xmlelement(NAME emp,
    xmlattributes(empno as empno,MGR as MGR,DEPTNO as DEPTNO),
    xmlforest(ename as ename,job as job,hiredate as hiredate,sal as sal,comm as comm)
   ) as xml
  from empa;

 3,xmlattributes函數:爲 XML 元素節點構造一個或多個 XML 屬性節點。XMLATTRIBUTES 是一個標量函數。
  示例1:
  select xmlelement(emp,
   xmlattributes('屬性值' AS "屬性名")
   ) AS xml
  from empa;

  select xmlelement(emp,
   xmlattributes(empno as empno)
   ) AS xml
  from empa;

  select xmlelement(emp,
   xmlattributes(empno AS "empno")
   ) AS xml
  from empa;

  示例2:
  select xmlelement(emptab,
    xmlelement(emp,
     xmlattributes(empno AS empno,MGR AS MGR,DEPTNO AS DEPTNO),
     xmlelement(NAME ename, xmlattributes(empno AS no),ename),
     xmlelement(job,job),
     xmlelement(COMM,comm)
    )
   ) as xml
  from empa;
 
 4,xmlconcat函數:連接兩個或多個 XML 值(XML表達式)。
  示例:
  select xmlelement(NAME emp,
    xmlconcat(
     xmlelement(NAME ename, ename),
     xmlelement(NAME sal, sal)
    )
   ) as xml
  from empa;
  
 5,XMLAGG函數:XMLAGG 函數在生成的 XML 值中將 XML 值聚合爲一系列的項。XMLAGG 是一種聚合(列)函數。必須要有group by子句。
  該函數可以用來增強XML樹狀結構的層次

  示例:
  select xmlelement(NAME emptab,
    xmlelement(NAME emp,
     xmlelement(NAME ename, e.ename),
     xmlelement(comm,e.comm),
     xmlagg(xmlelement(NAME dept,
      xmlattributes(d.deptno AS deptno),xmlelement(NAME dname,d.dname),xmlelement(NAME loc,d.loc))
     )
    )
   )
  from empa  e, dept d
  where e.deptno = d.deptno
  group by e.ename,e.comm;


 6,XMLNAMESPACES函數:從參數中構造 XML 名稱空間聲明。聲明在 XMLELEMENT 和 XMLFOREST 函數生成的元素的作用範圍內。

綜合示例:


單表示例:
  
  select xmlelement(NAME empTab,
    xmlelement(NAME emp,
     xmlattributes(empno AS empno,MGR AS MGR,DEPTNO AS DEPTNO),
     xmlforest(ename AS ename,job as job,hiredate as hiredate,sal as sal,comm as comm)
    )
   )
  from empa; 


存在主從表關係的示例(Oracle中的dept和emp):將dept表和emp表中的數據生成XML文檔輸出
  示例1:
  select xmlelement(NAME deptTab,
    xmlattributes(d.deptno AS deptno),
    xmlelement(NAME dname,d.dname),
    xmlelement(NAME loc, d.loc),
    xmlagg(xmlelement(NAME empTab,
      xmlelement(NAME emp,
       xmlattributes(e.empno AS empno,e.MGR AS MGR,e.DEPTNO AS DEPTNO),
       xmlelement(NAME ename,e.ename),
       xmlelement(job,e.job),
       xmlelement(comm,e.comm)
      )
     )
    )
   ).GETSTRINGVAL()  AS XML
  from empa e, dept d
  where e.deptno = d.deptno
  group by d.deptno,d.dname,d.loc;

  示例2:


結果如下: 
XML
--------------------------------------------------------------------------------
<DEPTTAB DEPTNO="10"><DNAME>ACCOUNTING</DNAME><LOC>NEW YORK</LOC><EMPTAB><EMP EM
PNO="7782" MGR="7839" DEPTNO="10"><ENAME>CLARK</ENAME><JOB>MANAGER</JOB><COMM></
COMM></EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="10"><DNAME>ACCOUNTING</DNAME><LOC>NEW YORK</LOC><EMPTAB><EMP EM
PNO="7839" DEPTNO="10"><ENAME>KING</ENAME><JOB>PRESIDENT</JOB><COMM></COMM></EMP
></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="10"><DNAME>ACCOUNTING</DNAME><LOC>NEW YORK</LOC><EMPTAB><EMP EM
PNO="7934" MGR="7782" DEPTNO="10"><ENAME>MILLER</ENAME><JOB>CLERK</JOB><COMM></C
OMM></EMP></EMPTAB></DEPTTAB>

XML
--------------------------------------------------------------------------------

<DEPTTAB DEPTNO="20"><DNAME>RESEARCH</DNAME><LOC>DALLAS</LOC><EMPTAB><EMP EMPNO=
"7369" MGR="7902" DEPTNO="20"><ENAME>SMITH</ENAME><JOB>CLERK</JOB><COMM></COMM><
/EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="20"><DNAME>RESEARCH</DNAME><LOC>DALLAS</LOC><EMPTAB><EMP EMPNO=
"7876" MGR="7788" DEPTNO="20"><ENAME>ADAMS</ENAME><JOB>CLERK</JOB><COMM></COMM><
/EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="20"><DNAME>RESEARCH</DNAME><LOC>DALLAS</LOC><EMPTAB><EMP EMPNO=
"7902" MGR="7566" DEPTNO="20"><ENAME>FORD</ENAME><JOB>ANALYST</JOB><COMM></COMM>

XML
--------------------------------------------------------------------------------
</EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="20"><DNAME>RESEARCH</DNAME><LOC>DALLAS</LOC><EMPTAB><EMP EMPNO=
"7788" MGR="7566" DEPTNO="20"><ENAME>SCOTT</ENAME><JOB>ANALYST</JOB><COMM></COMM
></EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="20"><DNAME>RESEARCH</DNAME><LOC>DALLAS</LOC><EMPTAB><EMP EMPNO=
"7566" MGR="7839" DEPTNO="20"><ENAME>JONES</ENAME><JOB>MANAGER</JOB><COMM></COMM
></EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7

XML
--------------------------------------------------------------------------------
499" MGR="7698" DEPTNO="30"><ENAME>ALLEN</ENAME><JOB>SALESMAN</JOB><COMM>300</CO
MM></EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7
698" MGR="7839" DEPTNO="30"><ENAME>BLAKE</ENAME><JOB>MANAGER</JOB><COMM></COMM><
/EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7
654" MGR="7698" DEPTNO="30"><ENAME>MARTIN</ENAME><JOB>SALESMAN</JOB><COMM>1400</
COMM></EMP></EMPTAB></DEPTTAB>


XML
--------------------------------------------------------------------------------
<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7
900" MGR="7698" DEPTNO="30"><ENAME>JAMES</ENAME><JOB>CLERK</JOB><COMM></COMM></E
MP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7
844" MGR="7698" DEPTNO="30"><ENAME>TURNER</ENAME><JOB>SALESMAN</JOB><COMM>0</COM
M></EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7
521" MGR="7698" DEPTNO="30"><ENAME>WARD</ENAME><JOB>SALESMAN</JOB><COMM>500</COM
M></EMP></EMPTAB></DEPTTAB>

XML
--------------------------------------------------------------------------------

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章