將數據庫中的數據發佈爲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
--------------------------------------------------------------------------------