我使用Oracle 11g(11.1.0.7.0),我必須創建查詢的XML文件。我在Forms 6中使用這個文件,用戶希望能夠在表單中按下一個按鈕的時候創建XML文件,所以我有一個PL/SQL包,它創建了一個包含XML數據的CLOB文件服務器和Forms 6i我讀這行文件行(UTL_FILE.FOPEN讀取,UTL_FILE.GET_LINE行)和TEXT_IO.PUT_LINE我在客戶端計算機上寫入文件。 這工作很好,但我有一個XML文件的問題。 現在它看起來像這樣(的值是例子!):如何使用Oracle 11g/DBMS_XMLGEN創建嵌套的XML文件?
<?xml version="1.0" encoding="ISO-8859-1" ?>
<ShoeShop>
<Article>
<Artnumber>12345</Artnumber>
<Artdesc>Black Shoes</Artdesc>
</Article>
<Article>
<Artnumber>12346</Artnumber>
<Artdesc>White Shoes</Artdesc>
</Article>
</ShoeShop>
確定。 我想創建一個如下所示的XML文件,但我不知道該怎麼做!我是SQL/PLSQL的新手,我學習了2個月,在此之前我使用了Progress 4GL。所以在進度中,我稱之爲「嵌套」,但我不知道如何用SQL/PLSQL實現它。 例爲XML的文件我多麼希望得到它:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<ShoeShop>
<Article="12345">
<Artdesc>Black Shoes</Artdesc>
</Article="12345">
<Article="12346">
<Artdesc>White Shoes</Artdesc>
</Article="12346">
</ShoeShop>
的代碼段用於創建XML的文件怎麼看起來像第一個例子:
PROCEDURE XML_TO_CLOB(pi_Query IN VARCHAR2,
pi_ParentNode IN VARCHAR2,
pi_ChildNode IN VARCHAR2) IS
qryCtx DBMS_XMLGEN.ctxHandle;
cResult CLOB;
BEGIN
-- Create new Context for the Query
qryCtx := DBMS_XMLGEN.newContext(pi_Query);
-- Set Parent and Child Node
DBMS_XMLGEN.setRowSetTag(qryCtx, pi_ParentNode);
DBMS_XMLGEN.SetRowTag(qryCtx, pi_ChildNode);
-- setNullHandling to show Tag also when the value is NULL
DBMS_XMLGEN.setNullHandling(qryCtx, DBMS_XMLGEN.EMPTY_TAG);
-- getXML in CLOB
cResult := DBMS_XMLGEN.getXML(qryCtx);
-- Put encoding to the "Header"
cResult := REPLACE(cResult, '<?xml version="1.0"?>', '<?xml version="1.0" encoding="ISO-8859-1" ?>');
-- Close Context
DBMS_XMLGEN.closeContext(qryCtx);
-- Write the CLOB to a file on the server to work with the data in Forms 6i
DBMS_XMSLPROCESSOR.CLOB2FILE(cResult, 'ExampleDir', 'Example.xml');
END;
非常感謝,
Sarah
兩個公佈的輸出之間的唯一區別在於'Artnumber'從它自己的權利元素轉變爲'Article'的屬性。還有其他的改變嗎? – APC