powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как в 8i при генерации XML из SELECT....
11 сообщений из 11, страница 1 из 1
Как в 8i при генерации XML из SELECT....
    #32147113
Аргамак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проще всего поменять столбец таблы с узла на атрибут?

как средствами PL/SQL сделать из выборки XML любого! нужного вида?
...
Рейтинг: 0 / 0
Как в 8i при генерации XML из SELECT....
    #32147286
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Standart Packs. For example, sys.dbms_xmlgen .
...
Рейтинг: 0 / 0
Как в 8i при генерации XML из SELECT....
    #32147302
Аргамак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно конкретно пример кода?
...
Рейтинг: 0 / 0
Как в 8i при генерации XML из SELECT....
    #32147347
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Begin --0100
vRes := Internal_Service.GetTagValue(iXml,'CUSTOMER_CODE',NULL,v_custcode);
if v_custcode is null and
v_custmsisdn is null then
v_status_code:=6650;
v_status_message:=PCK_CUST_TRANSACTION.ErrorDesc(v_status_code); else
if v_custcode is null then
............
.........
v_xml :='<IF_REPLY>'
||'<SERVICE_NAME>' || v_service_name || '</SERVICE_NAME>'
||'<REQUEST_STATUS>'
||'<STATUS>' || v_status || '</STATUS>'
||'<STATUS_CODE>' || to_char(v_status_code) || '</STATUS_CODE>'
||'<STATUS_MESSAGE>' || v_status_message || '</STATUS_MESSAGE>'
||'</REQUEST_STATUS><REQUEST_RESULT>' || v_request_result
||'</REQUEST_RESULT></IF_REPLY>';
Return (v_xml);
................
...
Рейтинг: 0 / 0
Как в 8i при генерации XML из SELECT....
    #32147351
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROCEDURE p_getXML(ctxHdl IN ctxType, xDoc IN CLOB, metaType IN NUMBER)
as LANGUAGE JAVA NAME
'oracle.xml.sql.query.OracleXMLStaticQuery.getXML(int, oracle.sql.CLOB, byte)';

PROCEDURE getXML(ctxHdl IN ctxType, xDoc IN CLOB, metaType IN NUMBER := 0) IS
begin
p_getXML(ctxHdl, xDoc, metaType);
end;
...
Рейтинг: 0 / 0
Как в 8i при генерации XML из SELECT....
    #32147358
Аргамак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо...буду разбираться...

А ни подскажешь как на 8i доставить пакеты xmldom и xslprocessor?
...
Рейтинг: 0 / 0
Как в 8i при генерации XML из SELECT....
    #32147369
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
726.
727.
728.
729.
730.
731.
732.
733.
734.
735.
736.
737.
738.
739.
740.
741.
742.
743.
744.
745.
746.
747.
748.
749.
750.
751.
752.
753.
754.
755.
756.
757.
758.
759.
760.
761.
762.
763.
764.
765.
766.
767.
768.
769.
770.
771.
772.
773.
774.
775.
776.
777.
778.
779.
780.
781.
782.
783.
784.
785.
786.
787.
788.
789.
790.
791.
792.
793.
794.
795.
796.
797.
798.
799.
800.
801.
802.
803.
804.
805.
806.
807.
808.
809.
810.
811.
812.
813.
814.
815.
816.
817.
818.
819.
820.
821.
822.
823.
824.
825.
826.
827.
828.
829.
830.
831.
832.
833.
834.
835.
836.
837.
838.
839.
840.
841.
842.
843.
844.
845.
846.
847.
848.
849.
850.
851.
852.
853.
854.
855.
856.
857.
858.
859.
860.
861.
862.
863.
864.
865.
866.
867.
868.
869.
870.
871.
872.
873.
874.
875.
876.
877.
878.
879.
880.
881.
882.
883.
884.
885.
886.
887.
888.
889.
890.
891.
892.
893.
894.
895.
896.
897.
898.
899.
900.
901.
902.
903.
904.
905.
906.
907.
908.
909.
910.
911.
912.
913.
914.
915.
916.
917.
918.
919.
920.
921.
922.
923.
924.
925.
926.
927.
928.
929.
930.
931.
932.
933.
934.
935.
936.
937.
938.
939.
940.
941.
942.
943.
944.
945.
946.
947.
948.
949.
950.
951.
952.
953.
954.
955.
956.
957.
958.
959.
960.
961.
962.
963.
964.
965.
966.
967.
968.
969.
970.
971.
972.
973.
974.
975.
976.
977.
978.
979.
980.
981.
982.
983.
984.
985.
986.
987.
988.
989.
990.
991.
992.
993.
994.
995.
996.
997.
998.
999.
1000.
1001.
1002.
1003.
1004.
1005.
1006.
1007.
1008.
1009.
1010.
1011.
1012.
1013.
1014.
1015.
1016.
1017.
1018.
1019.
1020.
1021.
1022.
1023.
1024.
1025.
1026.
1027.
1028.
1029.
1030.
1031.
1032.
1033.
1034.
1035.
1036.
1037.
1038.
1039.
1040.
1041.
1042.
1043.
1044.
1045.
1046.
1047.
1048.
1049.
1050.
1051.
1052.
1053.
1054.
1055.
1056.
1057.
1058.
1059.
1060.
1061.
1062.
1063.
1064.
1065.
1066.
1067.
1068.
1069.
1070.
1071.
1072.
1073.
1074.
1075.
1076.
1077.
1078.
1079.
1080.
1081.
1082.
1083.
1084.
1085.
1086.
1087.
1088.
1089.
1090.
1091.
1092.
1093.
1094.
1095.
1096.
1097.
1098.
1099.
1100.
1101.
1102.
1103.
1104.
1105.
1106.
1107.
1108.
1109.
1110.
1111.
1112.
1113.
1114.
1115.
1116.
1117.
1118.
1119.
1120.
1121.
1122.
1123.
1124.
1125.
1126.
1127.
1128.
1129.
1130.
1131.
1132.
1133.
1134.
1135.
1136.
1137.
1138.
1139.
1140.
1141.
1142.
1143.
1144.
1145.
1146.
1147.
1148.
1149.
1150.
1151.
1152.
1153.
1154.
1155.
1156.
1157.
1158.
1159.
1160.
1161.
1162.
1163.
1164.
1165.
1166.
1167.
1168.
1169.
1170.
1171.
1172.
1173.
1174.
1175.
1176.
1177.
1178.
1179.
1180.
1181.
1182.
1183.
1184.
1185.
1186.
1187.
1188.
1189.
1190.
1191.
1192.
1193.
1194.
1195.
1196.
1197.
1198.
1199.
1200.
1201.
1202.
1203.
1204.
1205.
1206.
1207.
1208.
1209.
1210.
1211.
1212.
1213.
1214.
1215.
1216.
1217.
1218.
1219.
1220.
1221.
1222.
1223.
1224.
1225.
1226.
1227.
1228.
1229.
1230.
1231.
1232.
1233.
1234.
1235.
1236.
1237.
1238.
1239.
1240.
1241.
1242.
1243.
1244.
1245.
1246.
1247.
1248.
1249.
1250.
1251.
1252.
1253.
1254.
1255.
1256.
1257.
1258.
1259.
1260.
1261.
1262.
1263.
1264.
1265.
1266.
1267.
1268.
1269.
1270.
1271.
1272.
1273.
1274.
1275.
1276.
1277.
1278.
1279.
1280.
1281.
1282.
1283.
1284.
1285.
1286.
1287.
1288.
1289.
1290.
1291.
1292.
1293.
1294.
1295.
1296.
1297.
1298.
1299.
1300.
1301.
1302.
1303.
1304.
1305.
1306.
1307.
1308.
1309.
1310.
1311.
1312.
1313.
1314.
1315.
1316.
1317.
1318.
1319.
1320.
1321.
1322.
1323.
1324.
1325.
1326.
1327.
1328.
1329.
1330.
1331.
1332.
1333.
1334.
1335.
1336.
1337.
1338.
1339.
1340.
1341.
1342.
1343.
1344.
1345.
1346.
1347.
1348.
1349.
1350.
1351.
1352.
1353.
1354.
1355.
1356.
1357.
1358.
1359.
1360.
1361.
1362.
1363.
1364.
1365.
1366.
1367.
1368.
1369.
1370.
1371.
1372.
1373.
1374.
1375.
1376.
1377.
1378.
1379.
1380.
1381.
1382.
1383.
1384.
1385.
1386.
1387.
1388.
1389.
1390.
1391.
1392.
1393.
1394.
1395.
1396.
1397.
1398.
1399.
1400.
1401.
1402.
1403.
1404.
1405.
1406.
1407.
1408.
1409.
1410.
1411.
1412.
1413.
1414.
1415.
1416.
1417.
1418.
1419.
1420.
1421.
1422.
1423.
1424.
1425.
1426.
1427.
1428.
1429.
1430.
1431.
1432.
1433.
1434.
1435.
1436.
1437.
1438.
1439.
1440.
1441.
1442.
1443.
1444.
1445.
1446.
1447.
1448.
1449.
1450.
1451.
1452.
1453.
1454.
1455.
1456.
1457.
1458.
1459.
1460.
1461.
1462.
1463.
1464.
1465.
1466.
1467.
1468.
1469.
1470.
1471.
1472.
1473.
1474.
1475.
1476.
1477.
1478.
1479.
1480.
1481.
1482.
1483.
1484.
1485.
1486.
1487.
1488.
1489.
1490.
1491.
1492.
1493.
1494.
1495.
1496.
1497.
1498.
1499.
1500.
1501.
1502.
1503.
1504.
1505.
1506.
1507.
1508.
1509.
1510.
1511.
1512.
1513.
1514.
1515.
1516.
1517.
1518.
1519.
1520.
1521.
1522.
1523.
1524.
1525.
1526.
1527.
1528.
1529.
1530.
1531.
1532.
1533.
1534.
1535.
1536.
1537.
1538.
1539.
1540.
1541.
1542.
1543.
1544.
1545.
1546.
1547.
1548.
1549.
1550.
1551.
1552.
1553.
1554.
1555.
1556.
1557.
1558.
1559.
1560.
1561.
1562.
1563.
1564.
1565.
1566.
1567.
1568.
1569.
1570.
1571.
1572.
1573.
1574.
1575.
1576.
1577.
1578.
1579.
1580.
1581.
1582.
1583.
1584.
1585.
1586.
1587.
1588.
1589.
1590.
1591.
1592.
1593.
1594.
1595.
1596.
1597.
1598.
1599.
1600.
1601.
1602.
1603.
1604.
1605.
1606.
1607.
1608.
1609.
1610.
1611.
1612.
1613.
1614.
1615.
1616.
1617.
1618.
1619.
1620.
1621.
1622.
1623.
1624.
1625.
1626.
1627.
1628.
1629.
1630.
1631.
1632.
1633.
1634.
1635.
1636.
1637.
1638.
1639.
1640.
1641.
1642.
1643.
1644.
1645.
1646.
1647.
1648.
1649.
1650.
1651.
1652.
1653.
1654.
1655.
1656.
1657.
1658.
1659.
1660.
1661.
1662.
1663.
1664.
1665.
1666.
1667.
1668.
1669.
1670.
1671.
1672.
1673.
1674.
1675.
1676.
1677.
1678.
1679.
1680.
1681.
1682.
1683.
1684.
1685.
1686.
1687.
1688.
1689.
1690.
1691.
1692.
1693.
1694.
1695.
1696.
1697.
1698.
1699.
1700.
1701.
1702.
1703.
1704.
1705.
1706.
1707.
1708.
1709.
1710.
1711.
1712.
1713.
1714.
1715.
1716.
1717.
1718.
1719.
1720.
1721.
1722.
1723.
1724.
1725.
1726.
1727.
1728.
1729.
1730.
1731.
1732.
1733.
1734.
1735.
1736.
1737.
1738.
1739.
1740.
1741.
1742.
1743.
1744.
1745.
1746.
1747.
1748.
1749.
1750.
1751.
1752.
1753.
1754.
1755.
1756.
1757.
1758.
1759.
1760.
1761.
1762.
1763.
1764.
1765.
1766.
1767.
1768.
1769.
1770.
1771.
1772.
1773.
1774.
1775.
1776.
1777.
1778.
1779.
1780.
1781.
1782.
1783.
1784.
1785.
1786.
1787.
1788.
1789.
1790.
1791.
1792.
1793.
1794.
1795.
1796.
1797.
1798.
1799.
1800.
1801.
1802.
1803.
1804.
1805.
1806.
1807.
1808.
1809.
1810.
1811.
1812.
1813.
1814.
1815.
1816.
1817.
1818.
1819.
1820.
1821.
1822.
1823.
1824.
1825.
1826.
1827.
1828.
1829.
1830.
1831.
1832.
1833.
1834.
1835.
1836.
1837.
1838.
1839.
1840.
1841.
1842.
1843.
1844.
1845.
1846.
1847.
1848.
1849.
1850.
1851.
1852.
1853.
1854.
1855.
1856.
1857.
1858.
1859.
1860.
1861.
1862.
1863.
1864.
1865.
1866.
1867.
1868.
1869.
1870.
1871.
1872.
1873.
1874.
1875.
1876.
1877.
1878.
1879.
1880.
1881.
1882.
1883.
1884.
1885.
1886.
1887.
1888.
1889.
1890.
1891.
1892.
1893.
1894.
1895.
1896.
1897.
1898.
1899.
1900.
1901.
1902.
1903.
1904.
1905.
1906.
1907.
1908.
1909.
1910.
1911.
1912.
1913.
1914.
1915.
1916.
1917.
1918.
1919.
1920.
1921.
1922.
1923.
1924.
1925.
1926.
1927.
1928.
1929.
1930.
1931.
1932.
1933.
1934.
1935.
1936.
1937.
1938.
1939.
1940.
1941.
1942.
1943.
1944.
1945.
1946.
1947.
1948.
1949.
1950.
1951.
1952.
1953.
1954.
1955.
1956.
1957.
1958.
1959.
1960.
1961.
1962.
1963.
1964.
1965.
1966.
1967.
1968.
1969.
1970.
1971.
1972.
1973.
1974.
1975.
1976.
1977.
1978.
1979.
1980.
1981.
1982.
1983.
1984.
1985.
1986.
1987.
1988.
1989.
1990.
1991.
1992.
1993.
1994.
1995.
1996.
1997.
1998.
1999.
2000.
2001.
2002.
2003.
2004.
2005.
2006.
2007.
2008.
2009.
2010.
2011.
2012.
2013.
2014.
2015.
2016.
2017.
2018.
2019.
2020.
2021.
2022.
2023.
2024.
2025.
2026.
2027.
2028.
2029.
2030.
2031.
2032.
2033.
2034.
2035.
2036.
2037.
2038.
2039.
2040.
2041.
2042.
2043.
2044.
2045.
2046.
2047.
2048.
2049.
2050.
2051.
2052.
2053.
2054.
2055.
2056.
2057.
2058.
2059.
2060.
2061.
2062.
2063.
2064.
2065.
2066.
2067.
2068.
2069.
2070.
2071.
2072.
2073.
2074.
2075.
2076.
2077.
2078.
2079.
2080.
2081.
2082.
2083.
2084.
2085.
2086.
2087.
2088.
2089.
2090.
2091.
2092.
2093.
2094.
2095.
2096.
2097.
2098.
2099.
2100.
2101.
2102.
2103.
2104.
2105.
2106.
2107.
2108.
2109.
2110.
2111.
2112.
2113.
2114.
2115.
2116.
2117.
2118.
2119.
2120.
2121.
2122.
2123.
2124.
2125.
2126.
2127.
2128.
2129.
2130.
2131.
2132.
2133.
2134.
2135.
2136.
2137.
2138.
2139.
2140.
2141.
2142.
2143.
2144.
2145.
2146.
2147.
2148.
2149.
2150.
2151.
2152.
2153.
2154.
2155.
2156.
2157.
2158.
2159.
2160.
2161.
2162.
2163.
2164.
2165.
2166.
2167.
2168.
2169.
2170.
2171.
2172.
2173.
2174.
2175.
2176.
2177.
2178.
2179.
2180.
2181.
2182.
2183.
2184.
2185.
2186.
2187.
2188.
2189.
2190.
2191.
2192.
2193.
2194.
2195.
2196.
2197.
2198.
2199.
2200.
2201.
2202.
2203.
2204.
2205.
2206.
2207.
2208.
2209.
2210.
2211.
2212.
2213.
2214.
2215.
2216.
2217.
2218.
2219.
2220.
2221.
2222.
2223.
2224.
2225.
2226.
2227.
2228.
2229.
2230.
2231.
2232.
2233.
2234.
2235.
2236.
2237.
2238.
2239.
2240.
2241.
2242.
2243.
2244.
2245.
2246.
2247.
2248.
2249.
2250.
2251.
2252.
2253.
2254.
2255.
2256.
2257.
2258.
2259.
2260.
2261.
2262.
2263.
2264.
2265.
2266.
2267.
2268.
2269.
2270.
2271.
2272.
2273.
2274.
2275.
2276.
2277.
2278.
2279.
2280.
2281.
2282.
2283.
2284.
2285.
2286.
2287.
2288.
2289.
2290.
2291.
2292.
2293.
2294.
2295.
2296.
2297.
2298.
2299.
2300.
2301.
2302.
2303.
2304.
2305.
2306.
2307.
2308.
2309.
2310.
2311.
2312.
2313.
2314.
2315.
2316.
2317.
2318.
2319.
2320.
2321.
2322.
2323.
2324.
2325.
2326.
2327.
2328.
2329.
2330.
2331.
2332.
2333.
2334.
2335.
2336.
2337.
2338.
2339.
2340.
2341.
2342.
2343.
2344.
2345.
2346.
2347.
2348.
2349.
2350.
2351.
2352.
2353.
2354.
2355.
2356.
2357.
2358.
2359.
2360.
2361.
2362.
2363.
2364.
2365.
2366.
2367.
2368.
2369.
2370.
2371.
2372.
2373.
2374.
2375.
2376.
2377.
2378.
2379.
2380.
2381.
2382.
2383.
2384.
2385.
2386.
2387.
2388.
2389.
2390.
2391.
2392.
2393.
2394.
2395.
2396.
2397.
2398.
2399.
2400.
2401.
2402.
2403.
2404.
2405.
2406.
2407.
2408.
2409.
2410.
2411.
2412.
2413.
2414.
2415.
2416.
2417.
2418.
2419.
2420.
2421.
2422.
2423.
2424.
2425.
2426.
2427.
2428.
2429.
2430.
2431.
2432.
2433.
2434.
2435.
2436.
2437.
2438.
2439.
2440.
2441.
2442.
2443.
2444.
2445.
2446.
2447.
2448.
2449.
2450.
2451.
2452.
2453.
2454.
2455.
2456.
2457.
2458.
2459.
2460.
2461.
2462.
2463.
2464.
2465.
2466.
2467.
2468.
2469.
2470.
2471.
2472.
2473.
2474.
2475.
2476.
2477.
2478.
2479.
2480.
2481.
2482.
2483.
2484.
2485.
2486.
2487.
2488.
2489.
2490.
2491.
2492.
2493.
2494.
2495.
2496.
2497.
2498.
2499.
2500.
2501.
2502.
2503.
2504.
2505.
2506.
2507.
2508.
2509.
2510.
2511.
2512.
2513.
2514.
2515.
2516.
2517.
2518.
2519.
2520.
2521.
2522.
2523.
2524.
2525.
2526.
2527.
2528.
2529.
2530.
2531.
2532.
2533.
2534.
2535.
2536.
2537.
2538.
2539.
2540.
2541.
2542.
2543.
2544.
2545.
2546.
2547.
2548.
2549.
2550.
2551.
2552.
2553.
2554.
2555.
2556.
2557.
2558.
2559.
2560.
2561.
2562.
2563.
2564.
2565.
2566.
2567.
2568.
2569.
2570.
2571.
2572.
2573.
2574.
2575.
2576.
2577.
2578.
2579.
2580.
2581.
2582.
2583.
2584.
2585.
2586.
2587.
2588.
2589.
2590.
2591.
2592.
2593.
2594.
2595.
2596.
2597.
2598.
2599.
2600.
2601.
2602.
2603.
2604.
2605.
2606.
2607.
2608.
2609.
2610.
2611.
2612.
2613.
2614.
2615.
2616.
2617.
2618.
2619.
2620.
2621.
2622.
2623.
2624.
2625.
2626.
2627.
2628.
2629.
2630.
2631.
2632.
2633.
2634.
2635.
2636.
2637.
2638.
2639.
2640.
2641.
2642.
2643.
2644.
2645.
2646.
2647.
2648.
2649.
2650.
2651.
2652.
2653.
2654.
2655.
2656.
2657.
2658.
2659.
2660.
2661.
2662.
2663.
2664.
2665.
2666.
2667.
2668.
2669.
2670.
2671.
2672.
2673.
2674.
2675.
2676.
2677.
2678.
2679.
2680.
2681.
2682.
2683.
2684.
2685.
2686.
2687.
2688.
2689.
2690.
2691.
2692.
2693.
2694.
2695.
2696.
2697.
2698.
2699.
2700.
2701.
2702.
2703.
2704.
2705.
2706.
2707.
2708.
2709.
2710.
2711.
2712.
2713.
2714.
2715.
2716.
2717.
2718.
2719.
2720.
2721.
2722.
2723.
2724.
2725.
2726.
2727.
2728.
2729.
2730.
2731.
2732.
2733.
2734.
2735.
2736.
2737.
2738.
2739.
2740.
2741.
2742.
2743.
2744.
2745.
2746.
2747.
2748.
2749.
2750.
2751.
2752.
2753.
2754.
2755.
2756.
2757.
2758.
2759.
2760.
2761.
2762.
2763.
2764.
2765.
2766.
2767.
2768.
2769.
2770.
2771.
2772.
2773.
2774.
2775.
2776.
2777.
2778.
2779.
2780.
2781.
2782.
2783.
2784.
2785.
2786.
2787.
2788.
2789.
2790.
2791.
2792.
2793.
2794.
2795.
2796.
2797.
2798.
2799.
2800.
2801.
2802.
2803.
2804.
2805.
2806.
2807.
2808.
2809.
2810.
2811.
2812.
2813.
2814.
2815.
2816.
2817.
2818.
2819.
2820.
2821.
2822.
2823.
2824.
2825.
2826.
2827.
2828.
2829.
2830.
2831.
2832.
2833.
2834.
2835.
2836.
2837.
2838.
2839.
2840.
2841.
2842.
2843.
2844.
2845.
2846.
2847.
2848.
2849.
2850.
2851.
2852.
2853.
2854.
2855.
2856.
2857.
2858.
2859.
2860.
2861.
2862.
2863.
2864.
2865.
2866.
2867.
2868.
2869.
2870.
2871.
2872.
2873.
2874.
2875.
2876.
2877.
2878.
2879.
2880.
2881.
2882.
2883.
2884.
2885.
2886.
2887.
2888.
2889.
2890.
2891.
2892.
2893.
2894.
2895.
2896.
2897.
2898.
2899.
2900.
2901.
2902.
2903.
2904.
2905.
2906.
2907.
2908.
2909.
2910.
2911.
2912.
2913.
2914.
2915.
2916.
2917.
2918.
2919.
2920.
2921.
2922.
2923.
2924.
2925.
2926.
2927.
2928.
2929.
2930.
2931.
2932.
2933.
2934.
2935.
2936.
2937.
2938.
2939.
2940.
2941.
2942.
2943.
2944.
2945.
2946.
2947.
2948.
2949.
2950.
2951.
2952.
2953.
2954.
2955.
2956.
2957.
2958.
2959.
2960.
2961.
2962.
2963.
2964.
2965.
2966.
2967.
2968.
2969.
2970.
2971.
2972.
2973.
2974.
2975.
2976.
2977.
2978.
2979.
2980.
2981.
2982.
2983.
2984.
2985.
2986.
2987.
2988.
2989.
2990.
2991.
2992.
2993.
2994.
2995.
2996.
2997.
2998.
2999.
3000.
3001.
3002.
3003.
3004.
3005.
3006.
3007.
3008.
3009.
3010.
3011.
3012.
3013.
3014.
3015.
3016.
3017.
3018.
3019.
3020.
3021.
3022.
3023.
3024.
3025.
3026.
3027.
3028.
3029.
3030.
3031.
3032.
3033.
3034.
3035.
3036.
3037.
3038.
3039.
3040.
3041.
3042.
3043.
3044.
3045.
3046.
3047.
3048.
3049.
3050.
3051.
3052.
3053.
3054.
3055.
3056.
3057.
3058.
3059.
3060.
3061.
3062.
3063.
3064.
3065.
3066.
3067.
3068.
3069.
3070.
3071.
3072.
3073.
3074.
3075.
3076.
3077.
3078.
3079.
3080.
3081.
3082.
3083.
3084.
3085.
3086.
3087.
3088.
3089.
3090.
3091.
3092.
3093.
3094.
3095.
3096.
3097.
3098.
3099.
3100.
3101.
3102.
3103.
3104.
3105.
3106.
3107.
3108.
3109.
3110.
3111.
3112.
3113.
3114.
3115.
3116.
3117.
3118.
3119.
3120.
3121.
3122.
3123.
3124.
3125.
3126.
3127.
3128.
3129.
3130.
3131.
3132.
3133.
3134.
3135.
3136.
3137.
3138.
3139.
3140.
3141.
3142.
3143.
3144.
3145.
3146.
3147.
3148.
3149.
3150.
3151.
3152.
3153.
3154.
3155.
3156.
3157.
3158.
3159.
3160.
3161.
3162.
3163.
3164.
3165.
3166.
3167.
3168.
3169.
3170.
create or replace package sys.xmldom authid current_user as

/**
 * DOM Node types
 */
ELEMENT_NODE CONSTANT NATURAL :=  1 ;
ATTRIBUTE_NODE CONSTANT NATURAL :=  2 ;
TEXT_NODE CONSTANT NATURAL :=  3 ;
CDATA_SECTION_NODE CONSTANT NATURAL :=  4 ;
ENTITY_REFERENCE_NODE CONSTANT NATURAL :=  5 ;
ENTITY_NODE CONSTANT NATURAL :=  6 ;
PROCESSING_INSTRUCTION_NODE CONSTANT NATURAL :=  7 ;
COMMENT_NODE CONSTANT NATURAL :=  8 ;
DOCUMENT_NODE CONSTANT NATURAL :=  9 ;
DOCUMENT_TYPE_NODE CONSTANT NATURAL :=  10 ;
DOCUMENT_FRAGMENT_NODE CONSTANT NATURAL :=  11 ;
NOTATION_NODE CONSTANT NATURAL :=  12 ;

/**
 * DOMException types
 */
INDEX_SIZE_ERR EXCEPTION;
DOMSTRING_SIZE_ERR EXCEPTION;
HIERARCHY_REQUEST_ERR EXCEPTION;
WRONG_DOCUMENT_ERR EXCEPTION;
INVALID_CHARACTER_ERR EXCEPTION;
NO_DATA_ALLOWED_ERR EXCEPTION;
NO_MODIFICATION_ALLOWED_ERR EXCEPTION;
NOT_FOUND_ERR EXCEPTION;
NOT_SUPPORTED_ERR EXCEPTION;
INUSE_ATTRIBUTE_ERR EXCEPTION;

/**
 * DOM interface types
 */
TYPE DOMNode IS RECORD (ID NUMBER NOT NULL := - 1 );
TYPE DOMNamedNodeMap IS RECORD (ID NUMBER NOT NULL := - 1 );
TYPE DOMNodeList IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMAttr IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMCDataSection IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMCharacterData IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMComment IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMDocumentFragment IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMElement IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMEntity IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMEntityReference IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMNotation IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMProcessingInstruction IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMText IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMImplementation IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMDocumentType IS RECORD ( ID NUMBER NOT NULL := - 1  );
TYPE DOMDocument IS RECORD ( ID NUMBER NOT NULL := - 1  );

/**
 * Checks if the given DOMNode is null TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(n DOMNode) RETURN BOOLEAN;

/**
 * DOM Node interface methods
 * These methods implement the DOM Node interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1950641247
 */
FUNCTION getNodeName(n DOMNode) RETURN VARCHAR2;
FUNCTION getNodeValue(n DOMNode) RETURN VARCHAR2;
PROCEDURE setNodeValue(n DOMNode, nodeValue IN VARCHAR2);
FUNCTION getNodeType(n DOMNode) RETURN NUMBER;
FUNCTION getParentNode(n DOMNode) RETURN DOMNode;
FUNCTION getChildNodes(n DOMNode) RETURN DOMNodeList;
FUNCTION getFirstChild(n DOMNode) RETURN DOMNode;
FUNCTION getLastChild(n DOMNode) RETURN DOMNode;
FUNCTION getPreviousSibling(n DOMNode) RETURN DOMNode;
FUNCTION getNextSibling(n DOMNode) RETURN DOMNode;
FUNCTION getAttributes(n DOMNode) RETURN DOMNamedNodeMap;
FUNCTION getOwnerDocument(n DOMNode) RETURN DOMDocument;
FUNCTION insertBefore(n DOMNode, newChild IN DOMNode, refChild IN DOMNode) 
RETURN DOMNode;
FUNCTION replaceChild(n DOMNode, newChild IN DOMNode, oldChild IN DOMNode)
RETURN DOMNode;
FUNCTION removeChild(n DOMNode, oldChild IN DOMNode) RETURN DOMNode;
FUNCTION appendChild(n DOMNode, newChild IN DOMNode) RETURN DOMNode;
FUNCTION hasChildNodes(n DOMNode) RETURN BOOLEAN;
FUNCTION cloneNode(n DOMNode, deep boolean) RETURN DOMNode;

/**
 * Writes DOMNode to specified file using the database character set
 */
PROCEDURE writeToFile(n DOMNode, fileName VARCHAR2);

/**
 * Writes DOMNode to specified buffer using the database character set
 */
PROCEDURE writeToBuffer(n DOMNode, buffer IN OUT VARCHAR2);

/**
 * Writes DOMNode to specified clob using the database character set
 */
PROCEDURE writeToClob(n DOMNode, cl IN OUT CLOB);

/**
 * Writes DOMNode to specified file using the given character set
 */
PROCEDURE writeToFile(n DOMNode, fileName VARCHAR2, charset VARCHAR2);

/**
 * Writes DOMNode to specified buffer using the given character set
 */
PROCEDURE writeToBuffer(n DOMNode, buffer IN OUT VARCHAR2, 
                        charset VARCHAR2);

/**
 * Writes DOMNode to specified clob using the given character set
 */
PROCEDURE writeToClob(n DOMNode, cl IN OUT CLOB, charset VARCHAR2);

/**
 * Casts given DOMNode to a DOMAttr
 */
FUNCTION makeAttr(n DOMNode) RETURN DOMAttr;

/**
 * Casts given DOMNode to a DOMCDataSection
 */
FUNCTION makeCDataSection(n DOMNode) RETURN DOMCDataSection;

/**
 * Casts given DOMNode to a DOMCharacterData
 */
FUNCTION makeCharacterData(n DOMNode) RETURN DOMCharacterData;

/**
 * Casts given DOMNode to a DOMComment
 */
FUNCTION makeComment(n DOMNode) RETURN DOMComment;

/**
 * Casts given DOMNode to a DOMDocumentFragment
 */
FUNCTION makeDocumentFragment(n DOMNode) RETURN DOMDocumentFragment;

/**
 * Casts given DOMNode to a DOMDocumentType
 */
FUNCTION makeDocumentType(n DOMNode) RETURN DOMDocumentType;

/**
 * Casts given DOMNode to a DOMElement
 */
FUNCTION makeElement(n DOMNode) RETURN DOMElement;

/**
 * Casts given DOMNode to a DOMEntity
 */
FUNCTION makeEntity(n DOMNode) RETURN DOMEntity;

/**
 * Casts given DOMNode to a DOMEntityReference
 */
FUNCTION makeEntityReference(n DOMNode) RETURN DOMEntityReference;

/**
 * Casts given DOMNode to a DOMNotation
 */
FUNCTION makeNotation(n DOMNode) RETURN DOMNotation;

/**
 * Casts given DOMNode to a DOMProcessingInstruction
 */
FUNCTION makeProcessingInstruction(n DOMNode) RETURN DOMProcessingInstruction;

/**
 * Casts given DOMNode to a DOMText
 */
FUNCTION makeText(n DOMNode) RETURN DOMText;

/**
 * Casts given DOMNode to a DOMDocument
 */
FUNCTION makeDocument(n DOMNode) RETURN DOMDocument;

PROCEDURE freeDocument(doc DOMDocument);

/**
 * Checks if the given DOM NamedNodeMap is null
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(nnm DOMNamedNodeMap) RETURN BOOLEAN;

/**
 * DOM NamedNodeMap interface methods
 * These methods implement the DOM NamedNodeMap interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1780488922
 */
FUNCTION getNamedItem(nnm DOMNamedNodeMap, name IN VARCHAR2) RETURN DOMNode;
FUNCTION setNamedItem(nnm DOMNamedNodeMap, arg IN DOMNode) RETURN DOMNode;
FUNCTION removeNamedItem(nnm DOMNamedNodeMap, name IN VARCHAR2) RETURN DOMNode;
FUNCTION item(nnm DOMNamedNodeMap, idx IN NUMBER) RETURN DOMNode;
FUNCTION getLength(nnm DOMNamedNodeMap) RETURN NUMBER;

/**
 * Checks if the given DOM NodeList is null
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(nl DOMNodeList) RETURN BOOLEAN;

/**
 * DOM NodeList interface methods
 * These methods implement the DOM NodeList interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-536297177
 */
FUNCTION item(nl DOMNodeList, idx IN NUMBER) RETURN DOMNode;
FUNCTION getLength(nl DOMNodeList) RETURN NUMBER;

/**
 * Checks if the given DOM Attr is null TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(a DOMAttr) RETURN BOOLEAN;

/**
 * Casts given DOMAttr to a DOMNode
 */
FUNCTION makeNode(a DOMAttr) RETURN DOMNode;

/**
 * DOM Attr interface methods
 * These methods implement the DOM Attr interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-637646024
 */
FUNCTION getName(a DOMAttr) RETURN VARCHAR2;
FUNCTION getSpecified(a DOMAttr) RETURN BOOLEAN;
FUNCTION getValue(a DOMAttr) RETURN VARCHAR2;
PROCEDURE setValue(a DOMAttr, value IN VARCHAR2);

FUNCTION getQualifiedName(a DOMAttr) return varchar2;
FUNCTION getNamespace(a DOMAttr) return varchar2;
FUNCTION getLocalName(a DOMAttr) return varchar2;
FUNCTION getExpandedName(a DOMAttr) return varchar2;

/**
 * Checks if the given DOM CDataSection is null
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(cds DOMCDataSection) RETURN BOOLEAN;

/**
 * Casts given DOMCDataSection to a DOMNode
 */
FUNCTION makeNode(cds DOMCDataSection) RETURN DOMNode;

/**
 * Checks if the given DOM CharacterData is null 
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(cd DOMCharacterData) RETURN BOOLEAN;

/**
 * Casts given DOMCharacterData to a DOMNode
 */
FUNCTION makeNode(cd DOMCharacterData) RETURN DOMNode;

/**
 * DOM CharacterData interface methods
 * These methods implement the DOM CharacterData interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-FF21A306
 */
FUNCTION getData(cd DOMCharacterData) RETURN VARCHAR2;
PROCEDURE setData(cd DOMCharacterData, data IN VARCHAR2);
FUNCTION getLength(cd DOMCharacterData) RETURN NUMBER;
FUNCTION substringData(cd DOMCharacterData, offset IN NUMBER, 
                       cnt IN NUMBER) RETURN VARCHAR2;
PROCEDURE appendData(cd DOMCharacterData, arg IN VARCHAR2);
PROCEDURE insertData(cd DOMCharacterData, offset IN NUMBER, arg IN VARCHAR2);
PROCEDURE deleteData(cd DOMCharacterData, offset IN NUMBER, cnt IN NUMBER);
PROCEDURE replaceData(cd DOMCharacterData, offset IN NUMBER, 
                      cnt IN NUMBER, arg IN VARCHAR2);

/**
 * Checks if the given DOM Comment is null TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(com DOMComment) RETURN BOOLEAN;

/**
 * Casts given DOMComment to a DOMNode
 */
FUNCTION makeNode(com DOMComment) RETURN DOMNode;

/**
 * Checks if the given DOM Implementation is null
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(di DOMImplementation) RETURN BOOLEAN;

/**
 * DOM DOMImplementation interface methods
 * These methods implement the DOM DOMImplementation interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490
 */
FUNCTION hasFeature(di DOMImplementation, feature IN VARCHAR2, 
                    version IN VARCHAR2) RETURN BOOLEAN;


/**
 * Checks if the given DOM DocumentFragment is null
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(df DOMDocumentFragment) RETURN BOOLEAN;

/**
 * Casts given DOMDocumentFragment to a DOMNode
 */
FUNCTION makeNode(df DOMDocumentFragment) RETURN DOMNode;

/**
 * Checks if the given DOM DocumentType is null
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(dt DOMDocumentType) RETURN BOOLEAN;

/**
 * Casts given DOMDocumentType to a DOMNode
 */
FUNCTION makeNode(dt DOMDocumentType) RETURN DOMNode;

/**
 * DOM DocumentType interface methods
 * These methods implement the DOM DocumentType interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-412266927
 */
FUNCTION getName(dt DOMDocumentType) RETURN VARCHAR2;
FUNCTION getEntities(dt DOMDocumentType) RETURN DOMNamedNodeMap;
FUNCTION getNotations(dt DOMDocumentType) RETURN DOMNamedNodeMap;

FUNCTION findEntity(dt DOMDocumentType, name varchar2, par boolean) 
return DOMEntity;

FUNCTION findNotation(dt DOMDocumentType, name varchar2) return DOMNotation;

FUNCTION getPublicId(dt DOMDocumentType) return varchar2;

FUNCTION getSystemId(dt DOMDocumentType) return varchar2;

PROCEDURE writeExternalDTDToFile(dt DOMDocumentType, fileName varchar2);

PROCEDURE writeExternalDTDToBuffer(dt DOMDocumentType, buffer in out varchar2);

PROCEDURE writeExternalDTDToClob(dt DOMDocumentType, cl in out clob);

PROCEDURE writeExternalDTDToFile(dt DOMDocumentType, fileName varchar2, 
                                 charset varchar2);

PROCEDURE writeExternalDTDToBuffer(dt DOMDocumentType, buffer in out varchar2, 
                                   charset varchar2);

PROCEDURE writeExternalDTDToClob(dt DOMDocumentType, cl in out clob, 
                                 charset varchar2);

/**
 * Checks if the given DOM Element is null
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(elem DOMElement) RETURN BOOLEAN;

/**
 * Casts given DOMElement to a DOMNode
 */
FUNCTION makeNode(elem DOMElement) RETURN DOMNode;

/**
 * DOM Element interface methods
 * These methods implement the DOM Element interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-745549614
 */
FUNCTION getTagName(elem DOMElement) RETURN VARCHAR2;
FUNCTION getAttribute(elem DOMElement, name IN VARCHAR2) RETURN VARCHAR2;
PROCEDURE setAttribute(elem DOMElement, name IN VARCHAR2, value IN VARCHAR2);
PROCEDURE removeAttribute(elem DOMElement, name IN VARCHAR2);
FUNCTION getAttributeNode(elem DOMElement, name IN VARCHAR2) RETURN DOMAttr;
FUNCTION setAttributeNode(elem DOMElement, newAttr IN DOMAttr) RETURN DOMAttr;
FUNCTION removeAttributeNode(elem DOMElement, oldAttr IN DOMAttr) 
RETURN DOMAttr;
FUNCTION getElementsByTagName(elem DOMElement, name IN VARCHAR2) 
RETURN DOMNodeList;
PROCEDURE normalize(elem DOMElement);

FUNCTION getQualifiedName(elem DOMElement) return varchar2;
FUNCTION getNamespace(elem DOMElement) return varchar2;
FUNCTION getLocalName(elem DOMElement) return varchar2;
FUNCTION getExpandedName(elem DOMElement) return varchar2;
FUNCTION getChildrenByTagName(elem DOMElement, name varchar2) 
return DOMNodeList;
FUNCTION getChildrenByTagName(elem DOMElement, name varchar2, ns varchar2) 
return DOMNodeList;
FUNCTION getElementsByTagName(elem DOMElement, name varchar2, ns varchar2)
return DOMNodeList;
FUNCTION resolveNamespacePrefix(elem DOMElement, prefix varchar2) 
return varchar2;

/**
 * Checks if the given DOM Entity is null
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(ent DOMEntity) RETURN BOOLEAN;

/**
 * Casts given DOMEntity to a DOMNode
 */
FUNCTION makeNode(ent DOMEntity) RETURN DOMNode;

/**
 * DOM Entity interface methods
 * These methods implement the DOM Entity interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-527DCFF2
 */
FUNCTION getPublicId(ent DOMEntity) RETURN VARCHAR2;
FUNCTION getSystemId(ent DOMEntity) RETURN VARCHAR2;
FUNCTION getNotationName(ent DOMEntity) RETURN VARCHAR2;

/**
 * Checks if the given DOM EntityReference is null 
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(eref DOMEntityReference) RETURN BOOLEAN;

/**
 * Casts given DOMEntityReference to a DOMNode
 */
FUNCTION makeNode(eref DOMEntityReference) RETURN DOMNode;

/**
 * Checks if the given DOM Notation is null 
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(n DOMNotation) RETURN BOOLEAN;

/**
 * Casts given DOMNotation to a DOMNode
 */
FUNCTION makeNode(n DOMNotation) RETURN DOMNode;

/**
 * DOM Notation interface methods
 * These methods implement the DOM Notation interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5431D1B9
 */
FUNCTION getPublicId(n DOMNotation) RETURN VARCHAR2;
FUNCTION getSystemId(n DOMNotation) RETURN VARCHAR2;

/**
 * Checks if the given DOM ProcessingInstruction is null 
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(pi DOMProcessingInstruction) RETURN BOOLEAN;

/**
 * Casts given DOMProcessingInstruction to a DOMNode
 */
FUNCTION makeNode(pi DOMProcessingInstruction) RETURN DOMNode;

/**
 * DOM ProcessingInstruction interface methods
 * These methods implement the DOM ProcessingInstruction interface as 
 * specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1004215813
 */
FUNCTION getData(pi DOMProcessingInstruction) RETURN VARCHAR2;
FUNCTION getTarget(pi DOMProcessingInstruction) RETURN VARCHAR2;
PROCEDURE setData(pi DOMProcessingInstruction, data IN VARCHAR2);

/**
 * Checks if the given DOM Text is null 
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(t DOMText) RETURN BOOLEAN;

/**
 * Casts given DOMText to a DOMNode
 */
FUNCTION makeNode(t DOMText) RETURN DOMNode;

/**
 * DOM Text interface methods
 * These methods implement the DOM Text interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1312295772
 */
FUNCTION splitText(t DOMText, offset IN NUMBER) RETURN DOMText;

/**
 * Checks if the given DOM Document is null 
 * TRUE - is null, FALSE - is not null
 */
FUNCTION isNull(doc DOMDocument) RETURN BOOLEAN;

/**
 * Casts given DOMDocument to a DOMNode
 */
FUNCTION makeNode(doc DOMDocument) RETURN DOMNode;

/**
 * Returns a new DOM Document instance
 */
FUNCTION newDOMDocument RETURN DOMDocument;

/**
 * DOM Document interface methods
 * These methods implement the DOM Document interface as specified in:
 * http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#i-Document
 */
FUNCTION getDoctype(doc DOMDocument) RETURN DOMDocumentType;
FUNCTION getImplementation(doc DOMDocument) RETURN DOMImplementation;
FUNCTION getDocumentElement(doc DOMDocument) RETURN DOMElement;
FUNCTION createElement(doc DOMDocument, tagName IN VARCHAR2) RETURN DOMElement;
FUNCTION createDocumentFragment(doc DOMDocument) RETURN DOMDocumentFragment;
FUNCTION createTextNode(doc DOMDocument, data IN VARCHAR2) RETURN DOMText;
FUNCTION createComment(doc DOMDocument, data IN VARCHAR2) RETURN DOMComment;
FUNCTION createCDATASection(doc DOMDocument, data IN VARCHAR2) 
RETURN DOMCDATASection;
FUNCTION createProcessingInstruction(doc DOMDocument, target IN VARCHAR2, 
                                     data IN VARCHAR2) 
RETURN DOMProcessingInstruction;
FUNCTION createAttribute(doc DOMDocument, name IN VARCHAR2) RETURN DOMAttr;
FUNCTION createEntityReference(doc DOMDocument, name IN VARCHAR2) 
RETURN DOMEntityReference;
FUNCTION getElementsByTagName(doc DOMDocument, tagname IN VARCHAR2) 
RETURN DOMNodeList;

/**
 * Gets version information for the XML document
 */
FUNCTION getVersion(doc DOMDocument) RETURN VARCHAR2;

/**
 * Sets version information for the XML document
 */
PROCEDURE setVersion(doc DOMDocument, version VARCHAR2);

/**
 * Gets character set of the XML document
 */
FUNCTION getCharset(doc DOMDocument) RETURN VARCHAR2;

/**
 * Sets character set of the XML document
 */
PROCEDURE setCharset(doc DOMDocument, charset VARCHAR2);

/**
 * Gets standalone information for the XML document
 */
FUNCTION getStandalone(doc DOMDocument) RETURN VARCHAR2;

/**
 * Sets standalone information for the XML document
 */
PROCEDURE setStandalone(doc DOMDocument, value VARCHAR2);

/**
 * Writes XML document to specified file using the database character set
 */
PROCEDURE writeToFile(doc DOMDocument, fileName VARCHAR2);

/**
 * Writes XML document to specified buffer using the database character set
 */
PROCEDURE writeToBuffer(doc DOMDocument, buffer IN OUT VARCHAR2);

/**
 * Writes XML document to specified clob using the database character set
 */
PROCEDURE writeToClob(doc DOMDocument, cl IN OUT CLOB);

/**
 * Writes XML document to specified file using the given character set
 */
PROCEDURE writeToFile(doc DOMDocument, fileName VARCHAR2, charset VARCHAR2);

/**
 * Writes XML document to specified buffer using the given character set
 */
PROCEDURE writeToBuffer(doc DOMDocument, buffer IN OUT VARCHAR2, 
                        charset VARCHAR2);

/**
 * Writes XML document to specified clob using the given character set
 */
PROCEDURE writeToClob(doc DOMDocument, cl IN OUT CLOB, charset VARCHAR2);

PROCEDURE writeExternalDTDToFile(doc DOMDocument, fileName varchar2);

PROCEDURE writeExternalDTDToBuffer(doc DOMDocument, buffer in out varchar2);

PROCEDURE writeExternalDTDToClob(doc DOMDocument, cl in out clob);

PROCEDURE writeExternalDTDToFile(doc DOMDocument, fileName varchar2, 
                                 charset varchar2);

PROCEDURE writeExternalDTDToBuffer(doc DOMDocument, buffer in out varchar2, 
                                   charset varchar2);

PROCEDURE writeExternalDTDToClob(doc DOMDocument, cl in out clob, 
                                 charset varchar2);

end xmldom;
create or replace package body sys.xmldom is

/**
 * Internal error
 */
INTERNAL_ERR CONSTANT NUMBER := - 20000 ;

/**
 * Other errors
 */
FILE_ERR CONSTANT NUMBER := - 20101 ;
CONN_ERR CONSTANT NUMBER := - 20102 ;
NULL_ERR CONSTANT NUMBER := - 20103 ;

/**
 * DOM Exception types
 */
DOM_INDEX_SIZE_ERR CONSTANT NATURAL :=  1 ;
DOM_DOMSTRING_SIZE_ERR CONSTANT NATURAL :=  2 ;
DOM_HIERARCHY_REQUEST_ERR CONSTANT NATURAL :=  3 ;
DOM_WRONG_DOCUMENT_ERR CONSTANT NATURAL :=  4 ;
DOM_INVALID_CHARACTER_ERR CONSTANT NATURAL :=  5 ;
DOM_NO_DATA_ALLOWED_ERR CONSTANT NATURAL :=  6 ;
DOM_NO_MOD_ALLOWED_ERR CONSTANT NATURAL :=  7 ;
DOM_NOT_FOUND_ERR CONSTANT NATURAL :=  8 ;
DOM_NOT_SUPPORTED_ERR CONSTANT NATURAL :=  9 ;
DOM_INUSE_ATTRIBUTE_ERR CONSTANT NATURAL :=  10 ;

/**
 * Package private methods
 */
PROCEDURE raise_app_error(ecode NUMBER, emesg VARCHAR2 := null) IS
BEGIN
   if ecode = NULL_ERR then
      raise_application_error(ecode, 'Null input is not allowed');
   else
      raise_application_error(INTERNAL_ERR,
                              'An internal error has occurred: ' || emesg);
   end if;
END raise_app_error;

PROCEDURE raise_dom_exception(err NUMBER) IS
BEGIN
   if err = DOM_INDEX_SIZE_ERR then
      raise INDEX_SIZE_ERR;
   elsif err = DOM_DOMSTRING_SIZE_ERR then
      raise DOMSTRING_SIZE_ERR;
   elsif err = DOM_HIERARCHY_REQUEST_ERR then
      raise HIERARCHY_REQUEST_ERR;
   elsif err = DOM_WRONG_DOCUMENT_ERR then
      raise WRONG_DOCUMENT_ERR;
   elsif err = DOM_INVALID_CHARACTER_ERR then
      raise INVALID_CHARACTER_ERR;
   elsif err = DOM_NO_DATA_ALLOWED_ERR then
      raise NO_DATA_ALLOWED_ERR;
   elsif err = DOM_NO_MOD_ALLOWED_ERR then
      raise NO_MODIFICATION_ALLOWED_ERR;
   elsif err = DOM_NOT_FOUND_ERR then
      raise NOT_FOUND_ERR;
   elsif err = DOM_NOT_SUPPORTED_ERR then
      raise NOT_SUPPORTED_ERR;
   elsif err = DOM_INUSE_ATTRIBUTE_ERR then
      raise INUSE_ATTRIBUTE_ERR;
   else
      raise_app_error(INTERNAL_ERR, to_char(err));
   end if;
END raise_dom_exception;

/**
 * Node interface methods
 */
FUNCTION isNull(n DOMNode) RETURN BOOLEAN IS
BEGIN
   if n.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION getNodeName(n DOMNode) RETURN VARCHAR2 IS
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlnodecover.getNodeName(n.ID);
END getNodeName;

FUNCTION getNodeValue(n DOMNode) RETURN VARCHAR2 IS
   val VARCHAR2( 32000 );	
   err number := - 1 ;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   val := xmlnodecover.getNodeValue(n.ID, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   return val;
END getNodeValue;

PROCEDURE setNodeValue(n DOMNode, nodeValue IN VARCHAR2) IS
   err number := - 1 ;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlnodecover.setNodeValue(n.ID, nodeValue, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
END setNodeValue;

FUNCTION getNodeType(n DOMNode) RETURN NUMBER IS
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlnodecover.getNodeType(n.ID);
END getNodeType;

FUNCTION getParentNode(n DOMNode) RETURN DOMNode IS
   parent NUMBER;
   pnode  DOMNode;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   parent := xmlnodecover.getParentNode(n.ID);
   pnode.ID := parent;
   return pnode;
END getParentNode;

FUNCTION getChildNodes(n DOMNode) RETURN DOMNodeList IS
   children NUMBER;
   cnl DOMNodeList;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   children := xmlnodecover.getChildNodes(n.ID);
   cnl.ID := children;
   return cnl;
END getChildNodes;

FUNCTION getFirstChild(n DOMNode) RETURN DOMNode IS
   child NUMBER;
   cnode DOMNode;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   child := xmlnodecover.getFirstChild(n.ID);
   cnode.ID := child;
   return cnode;
END getFirstChild;

FUNCTION getLastChild(n DOMNode) RETURN DOMNode IS
   child NUMBER;
   cnode DOMNode;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   child := xmlnodecover.getLastChild(n.ID);
   cnode.ID := child;
   return cnode;
END getLastChild;

FUNCTION getPreviousSibling(n DOMNode) RETURN DOMNode IS
   sibling NUMBER;
   snode   DOMNode;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   sibling := xmlnodecover.getPreviousSibling(n.ID);
   snode.ID := sibling;
   return snode;
END getPreviousSibling;

FUNCTION getNextSibling(n DOMNode) RETURN DOMNode IS
   sibling NUMBER;
   snode   DOMNode;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   sibling := xmlnodecover.getNextSibling(n.ID);
   snode.ID := sibling;
   return snode;
END getNextSibling;

FUNCTION getAttributes(n DOMNode) RETURN DOMNamedNodeMap IS
   attrs NUMBER;
   annm  DOMNamedNodeMap;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   attrs := xmlnodecover.getAttributes(n.ID);
   annm.ID := attrs;
   return annm;
END getAttributes;

FUNCTION getOwnerDocument(n DOMNode) RETURN DOMDocument IS
   doc NUMBER;
   ddoc DOMDocument;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   doc := xmlnodecover.getOwnerDocument(n.ID);
   ddoc.ID := doc;
   return ddoc;
END getOwnerDocument;

FUNCTION insertBefore(n DOMNode, newChild IN DOMNode, refChild IN DOMNode) 
RETURN DOMNode IS
   child NUMBER;
   cnode DOMNode;
   err number := - 1 ;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   child := xmlnodecover.insertBefore(n.ID, newChild.ID, refChild.ID, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   cnode.ID := child;
   return cnode;
END insertBefore;

FUNCTION replaceChild(n DOMNode, newChild IN DOMNode, oldChild IN DOMNode) 
RETURN DOMNode IS
   child NUMBER;
   cnode DOMNode;
   err number := - 1 ;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   child := xmlnodecover.replaceChild(n.ID, newChild.ID, oldChild.ID, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   cnode.ID := child;
   return cnode;
END replaceChild;

FUNCTION removeChild(n DOMNode, oldChild IN DOMNode) RETURN DOMNode IS
   child NUMBER;
   cnode DOMNode;
   err number := - 1 ;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   child := xmlnodecover.removeChild(n.ID, oldChild.ID, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   cnode.ID := child;
   return cnode;
END removeChild;

FUNCTION appendChild(n DOMNode, newChild IN DOMNode) RETURN DOMNode IS
   child NUMBER;
   cnode DOMNode;
   err number := - 1 ;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   child := xmlnodecover.appendChild(n.ID, newChild.ID, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   cnode.ID := child;
   return cnode;
END appendChild;

FUNCTION hasChildNodes(n DOMNode) RETURN BOOLEAN IS
   hc NUMBER;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   hc := xmlnodecover.hasChildNodes(n.ID);
   if hc =  1  then
      return TRUE;
   else
      return FALSE;
   end if;
END hasChildNodes;

FUNCTION cloneNode(n DOMNode, deep boolean) RETURN DOMNode IS
   clone NUMBER;
   cnode DOMNode;
   dc number;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   if deep = TRUE then
      dc :=  1 ;
   else
      dc :=  0 ;
   end if;
   clone := xmlnodecover.cloneNode(n.ID, dc);
   cnode.ID := clone;
   return cnode;
END cloneNode;

PROCEDURE writeToFile(n DOMNode, fileName VARCHAR2) IS
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmlnodecover.writeToFile(n.ID, fileName, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeToFile;

PROCEDURE writeToBuffer(n DOMNode, buffer IN OUT VARCHAR2) IS
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmlnodecover.writeToBuffer(n.ID, buffer, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeToBuffer;

PROCEDURE writeToClob(n DOMNode, cl IN OUT CLOB) IS
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmlnodecover.writeToClob(n.ID, cl, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeToClob;

PROCEDURE writeToFile(n DOMNode, fileName VARCHAR2, charset VARCHAR2) IS
   err VARCHAR2( 512 ) := null;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlnodecover.writeToFile(n.ID, fileName, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeToFile;

PROCEDURE writeToBuffer(n DOMNode, buffer IN OUT VARCHAR2, 
                       charset VARCHAR2) IS
   err VARCHAR2( 512 ) := null;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlnodecover.writeToBuffer(n.ID, buffer, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeToBuffer;

PROCEDURE writeToClob(n DOMNode, cl IN OUT CLOB, charset VARCHAR2) IS
   err VARCHAR2( 512 ) := null;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlnodecover.writeToClob(n.ID, cl, charset, err);
   if err is not null then
      raise_app_error(CONN_ERR, err);
   end if;
END writeToClob;

FUNCTION makeAttr(n DOMNode) RETURN DOMAttr IS
   a DOMAttr;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   a.ID := n.ID;
   return a;
END makeAttr;

FUNCTION makeCDataSection(n DOMNode) RETURN DOMCDataSection IS
   cds DOMCDataSection;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   cds.ID := n.ID;
   return cds;
END makeCDataSection;

FUNCTION makeCharacterData(n DOMNode) RETURN DOMCharacterData IS
   cd DOMCharacterData;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   cd.ID := n.ID;
   return cd;
END makeCharacterData;

FUNCTION makeComment(n DOMNode) RETURN DOMComment IS
   com DOMComment;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   com.ID := n.ID;
   return com;
END makeComment;

FUNCTION makeDocumentFragment(n DOMNode) RETURN DOMDocumentFragment IS
   df DOMDocumentFragment;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   df.ID := n.ID;
   return df;
END makeDocumentFragment;

FUNCTION makeDocumentType(n DOMNode) RETURN DOMDocumentType IS
   dt DOMDocumentType;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   dt.ID := n.ID;
   return dt;
END makeDocumentType;

FUNCTION makeElement(n DOMNode) RETURN DOMElement IS
   elem DOMElement;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   elem.ID := n.ID;
   return elem;
END makeElement;

FUNCTION makeEntity(n DOMNode) RETURN DOMEntity IS
   ent DOMEntity;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   ent.ID := n.ID;
   return ent;
END makeEntity;

FUNCTION makeEntityReference(n DOMNode) RETURN DOMEntityReference IS
   eref DOMEntityReference;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   eref.ID := n.ID;
   return eref;
END makeEntityReference;

FUNCTION makeNotation(n DOMNode) RETURN DOMNotation IS
   dn DOMNotation;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   dn.ID := n.ID;
   return dn;
END makeNotation;

FUNCTION makeProcessingInstruction(n DOMNode) 
RETURN DOMProcessingInstruction IS
   pi DOMProcessingInstruction;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   pi.ID := n.ID;
   return pi;
END makeProcessingInstruction;

FUNCTION makeText(n DOMNode) RETURN DOMText IS
   t DOMText;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   t.ID := n.ID;
   return t;
END makeText;

FUNCTION makeDocument(n DOMNode) RETURN DOMDocument IS
   doc DOMDocument;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   doc.ID := n.ID;
   return doc;
END makeDocument;

PROCEDURE freeDocument(doc DOMDocument) is
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlnodecover.freeDocument(doc.ID);
END freeDocument;
/**
 * NamedNodeMap interface methods
 */
FUNCTION isNull(nnm DOMNamedNodeMap) RETURN BOOLEAN IS
BEGIN
   if nnm.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;
         
FUNCTION getNamedItem(nnm DOMNamedNodeMap, name IN VARCHAR2) RETURN DOMNode IS
   item NUMBER;
   inode DOMNode;
BEGIN
   if nnm.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   item := xmlnnmcover.getNamedItem(nnm.ID, name);
   inode.ID := item;
   return inode;
END getNamedItem;

FUNCTION setNamedItem(nnm DOMNamedNodeMap, arg IN DOMNode) RETURN DOMNode IS
   item NUMBER;
   inode DOMNode;
   err number := - 1 ;
BEGIN
   if nnm.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   item := xmlnnmcover.setNamedItem(nnm.ID, arg.ID, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   inode.ID := item;
   return inode;
END setNamedItem;

FUNCTION removeNamedItem(nnm DOMNamedNodeMap, name IN VARCHAR2) 
RETURN DOMNode IS
   item NUMBER;
   inode DOMNode;
   err number := - 1 ;
BEGIN
   if nnm.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   item := xmlnnmcover.removeNamedItem(nnm.ID, name, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   inode.ID := item;
   return inode;
END removeNamedItem;

FUNCTION item(nnm DOMNamedNodeMap, idx IN NUMBER) RETURN DOMNode IS
   item NUMBER;
   inode DOMNode;
BEGIN
   if nnm.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   item := xmlnnmcover.item(nnm.ID, idx);
   inode.ID := item;
   return inode;
END item;

FUNCTION getLength(nnm DOMNamedNodeMap) RETURN NUMBER IS
BEGIN
   if nnm.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlnnmcover.getLength(nnm.ID);
END getLength;

/**
 * NodeList interface methods
 */
FUNCTION isNull(nl DOMNodeList) RETURN BOOLEAN IS
BEGIN
   if nl.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION item(nl DOMNodeList, idx IN NUMBER) RETURN DOMNode IS
   item NUMBER;
   inode DOMNode;
BEGIN
   if nl.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   item := xmlnodelistcover.item(nl.ID, idx);
   inode.ID := item;
   return inode;
END item;

FUNCTION getLength(nl DOMNodeList) RETURN NUMBER IS
BEGIN
   if nl.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlnodelistcover.getLength(nl.ID);
END getLength;

/** 
 * Attr interface methods
 */
FUNCTION isNull(a DOMAttr) RETURN BOOLEAN IS
BEGIN
   if a.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(a DOMAttr) RETURN DOMNode IS
   anode DOMNode;
BEGIN
   if a.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   anode.ID := a.ID;
   return anode;
END makeNode;

FUNCTION getName(a DOMAttr) RETURN VARCHAR2 IS
BEGIN
   if a.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlattrcover.getName(a.ID);
END getName;
 
FUNCTION getSpecified(a DOMAttr) RETURN BOOLEAN IS
   spec NUMBER;
BEGIN
   if a.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   spec := xmlattrcover.getSpecified(a.ID);
   if spec =  1  then
      return TRUE;
   else
      return FALSE;
   end if;
END getSpecified;

FUNCTION getValue(a DOMAttr) RETURN VARCHAR2 IS
BEGIN
   if a.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlattrcover.getValue(a.ID);
END getValue;

PROCEDURE setValue(a DOMAttr, value IN VARCHAR2) IS
BEGIN
   if a.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlattrcover.setValue(a.ID, value);
END setValue;

FUNCTION getQualifiedName(a DOMAttr) return varchar2 is
BEGIN
   if a.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlattrcover.getQualifiedName(a.ID);
END getQualifiedName;

FUNCTION getNamespace(a DOMAttr) return varchar2 is
BEGIN
   if a.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlattrcover.getNamespace(a.ID);
END getNamespace;

FUNCTION getLocalName(a DOMAttr) return varchar2 is
BEGIN
   if a.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlattrcover.getLocalName(a.ID);
END getLocalName;

FUNCTION getExpandedName(a DOMAttr) return varchar2 is
BEGIN
   if a.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlattrcover.getExpandedName(a.ID);
END getExpandedName;

/**
 * CDATASection interface methods
 */
FUNCTION isNull(cds DOMCDataSection) RETURN BOOLEAN IS
BEGIN
   if cds.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(cds DOMCDataSection) RETURN DOMNode IS
   cdsnode DOMNode;
BEGIN
   if cds.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   cdsnode.ID := cds.ID;
   return cdsnode;
END makeNode;

/**
 * CharacterData interface methods
 */
FUNCTION isNull(cd DOMCharacterData) RETURN BOOLEAN IS
BEGIN
   if cd.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(cd DOMCharacterData) RETURN DOMNode IS
   cdnode DOMNode;
BEGIN
   if cd.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   cdnode.ID := cd.ID;
   return cdnode;
END makeNode;

FUNCTION getData(cd DOMCharacterData) RETURN VARCHAR2 IS
   val VARCHAR2( 32000 );
   err number := - 1 ;
BEGIN
   if cd.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   val := xmlchardatacover.getData(cd.ID, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   return val;
END getData;

PROCEDURE setData(cd DOMCharacterData, data IN VARCHAR2) IS
   err number := - 1 ;
BEGIN
   if cd.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlchardatacover.setData(cd.ID, data, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
END setData;

FUNCTION getLength(cd DOMCharacterData) RETURN NUMBER IS
BEGIN
   if cd.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlchardatacover.getLength(cd.ID);
END getLength;

FUNCTION substringData(cd DOMCharacterData, offset IN NUMBER, 
                       cnt IN NUMBER) RETURN VARCHAR2 IS
   val VARCHAR2( 32000 );
   err number := - 1 ;
BEGIN
   if cd.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   val := xmlchardatacover.substringData(cd.ID, offset, cnt, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   return val;
END substringData;

PROCEDURE appendData(cd DOMCharacterData, arg IN VARCHAR2) IS
   err number := - 1 ;
BEGIN
   if cd.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlchardatacover.appendData(cd.ID, arg, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
END appendData;

PROCEDURE insertData(cd DOMCharacterData, offset IN NUMBER, 
                            arg IN VARCHAR2) IS
   err number := - 1 ;
BEGIN
   if cd.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlchardatacover.insertData(cd.ID, offset, arg, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
END insertData;

PROCEDURE deleteData(cd DOMCharacterData, offset IN NUMBER, 
                            cnt IN NUMBER) IS
   err number := - 1 ;
BEGIN
   if cd.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlchardatacover.deleteData(cd.ID, offset, cnt, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
END deleteData;

PROCEDURE replaceData(cd DOMCharacterData, offset IN NUMBER, 
                             cnt IN NUMBER, arg IN VARCHAR2) IS
   err number := - 1 ;
BEGIN
   if cd.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlchardatacover.replaceData(cd.ID, offset, cnt, arg, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
END replaceData;

/**
 * Comment interface methods
 */
FUNCTION isNull(com DOMComment) RETURN BOOLEAN IS
BEGIN
   if com.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(com DOMComment) RETURN DOMNode IS
   comnode DOMNode;
BEGIN
   if com.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   comnode.ID := com.ID;
   return comnode;
END makeNode;

/**
 * DOMImplementation interface methods
 */
FUNCTION isNull(di DOMImplementation) RETURN BOOLEAN IS
BEGIN
   if di.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION hasFeature(di DOMImplementation, feature IN VARCHAR2, 
                    version IN VARCHAR2) RETURN BOOLEAN IS
   hf NUMBER;
BEGIN
   if di.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   hf := xmldomimplcover.hasFeature(di.ID, feature, version);
   if hf =  1  then
     return TRUE;
   else
     return FALSE;
   end if;
END hasFeature;

/**
 * DocumentFragment interface methods
 */
FUNCTION isNull(df DOMDocumentFragment) RETURN BOOLEAN IS
BEGIN
   if df.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(df DOMDocumentFragment) RETURN DOMNode IS
   dfnode DOMNode;
BEGIN
   if df.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   dfnode.ID := df.ID;
   return dfnode;
END makeNode;

/**
 * DocumentType interface methods
 */
FUNCTION isNull(dt DOMDocumentType) RETURN BOOLEAN IS
BEGIN
   if dt.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(dt DOMDocumentType) RETURN DOMNode IS
   dtnode DOMNode;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   dtnode.ID := dt.ID;
   return dtnode;
END makeNode;

FUNCTION getName(dt DOMDocumentType) RETURN VARCHAR2 IS
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmldtdcover.getName(dt.ID);
END getName;

FUNCTION getEntities(dt DOMDocumentType) RETURN DOMNamedNodeMap IS
   entities NUMBER;
   ennm DOMNamedNodeMap;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   entities := xmldtdcover.getEntities(dt.ID);
   ennm.ID := entities;
   return ennm;
END getEntities;

FUNCTION getNotations(dt DOMDocumentType) RETURN DOMNamedNodeMap IS
   notations NUMBER;
   nnnm DOMNamedNodeMap;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   notations := xmldtdcover.getNotations(dt.ID);
   nnnm.ID := notations;
   return nnnm;
END getNotations;

FUNCTION findEntity(dt DOMDocumentType, name varchar2, par boolean) 
return DOMEntity is
   entity DOMEntity;
   param  number;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   if par = TRUE then
      param :=  1 ;
   else
      param :=  0 ;
   end if;
   entity.ID := xmldtdcover.findEntity(dt.ID, name, param);
   return entity;
END findEntity;
   
FUNCTION findNotation(dt DOMDocumentType, name varchar2) return DOMNotation is
   notation DOMNotation;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   notation.ID := xmldtdcover.findNotation(dt.ID, name);
   return notation;
END findNotation;

FUNCTION getPublicId(dt DOMDocumentType) return varchar2 is
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmldtdcover.getPublicId(dt.ID);
END getPublicId;

FUNCTION getSystemId(dt DOMDocumentType) return varchar2 is
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return  xmldtdcover.getSystemId(dt.ID);
END getSystemId;

PROCEDURE writeExternalDTDToFile(dt DOMDocumentType, fileName varchar2) is
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmldtdcover.writeExternalDTDToFile(dt.ID, fileName, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeExternalDTDToFile;

PROCEDURE writeExternalDTDToBuffer(dt DOMDocumentType, buffer in out varchar2)
is
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmldtdcover.writeExternalDTDToBuffer(dt.ID, buffer, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeExternalDTDToBuffer;

PROCEDURE writeExternalDTDToClob(dt DOMDocumentType, cl in out clob) is
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmldtdcover.writeExternalDTDToClob(dt.ID, cl, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeExternalDTDToClob;

PROCEDURE writeExternalDTDToFile(dt DOMDocumentType, fileName varchar2, 
                                 charset varchar2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldtdcover.writeExternalDTDToFile(dt.ID, fileName, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeExternalDTDToFile;

PROCEDURE writeExternalDTDToBuffer(dt DOMDocumentType, buffer in out varchar2, 
                                   charset varchar2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldtdcover.writeExternalDTDToBuffer(dt.ID, buffer, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeExternalDTDToBuffer;

PROCEDURE writeExternalDTDToClob(dt DOMDocumentType, cl in out clob, 
                                 charset varchar2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if dt.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldtdcover.writeExternalDTDToClob(dt.ID, cl, charset, err);
   if err is not null then
      raise_app_error(CONN_ERR, err);
   end if;
END writeExternalDTDToClob;

/** 
 * Element interface methods
 */
FUNCTION isNull(elem DOMElement) RETURN BOOLEAN IS
BEGIN
   if elem.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(elem DOMElement) RETURN DOMNode IS
   elemnode DOMNode;
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   elemnode.ID := elem.ID;
   return elemnode;
END makeNode;

FUNCTION getTagName(elem DOMElement) RETURN VARCHAR2 IS
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlelementcover.getTagName(elem.ID);
END getTagName;

FUNCTION getAttribute(elem DOMElement, name IN VARCHAR2) 
RETURN VARCHAR2 IS
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlelementcover.getAttribute(elem.ID, name);
END getAttribute;

PROCEDURE setAttribute(elem DOMElement, name IN VARCHAR2, 
                              value IN VARCHAR2) IS
   err number := - 1 ;
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlelementcover.setAttribute(elem.ID, name, value, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
END setAttribute;

PROCEDURE removeAttribute(elem DOMElement, name IN VARCHAR2) IS
   err number := - 1 ;
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlelementcover.removeAttribute(elem.ID, name, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
END removeAttribute;

FUNCTION getAttributeNode(elem DOMElement, name IN VARCHAR2) 
RETURN DOMAttr IS
   attr NUMBER;
   aattr DOMAttr;
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   attr := xmlelementcover.getAttributeNode(elem.ID, name);
   aattr.ID := attr;
   return aattr;
END getAttributeNode;

FUNCTION setAttributeNode(elem DOMElement, newAttr IN DOMAttr) 
RETURN DOMAttr IS
   attr NUMBER;
   aattr DOMAttr;
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   attr := xmlelementcover.setAttributeNode(elem.ID, newAttr.ID);
   aattr.ID := attr;
   return aattr;
END setAttributeNode;

FUNCTION removeAttributeNode(elem DOMElement, oldAttr IN DOMAttr) 
RETURN DOMAttr IS
   attr NUMBER;
   aattr DOMAttr;
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   attr := xmlelementcover.removeAttributeNode(elem.ID, oldAttr.ID);
   aattr.ID := attr;
   return aattr;
END removeAttributeNode;

FUNCTION getElementsByTagName(elem DOMElement, name IN VARCHAR2) 
RETURN DOMNodeList IS
   elements NUMBER;
   enl DOMNodeList;
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   elements := xmlelementcover.getElementsByTagName(elem.ID, name);
   enl.ID := elements;
   return enl;
END getElementsByTagName;

PROCEDURE normalize(elem DOMElement) IS
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlelementcover.normalize(elem.ID);
END normalize;

FUNCTION getQualifiedName(elem DOMElement) return varchar2 is
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlelementcover.getQualifiedName(elem.ID);
END getQualifiedName;

FUNCTION getNamespace(elem DOMElement) return varchar2 is
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlelementcover.getNamespace(elem.ID);
END getNamespace;

FUNCTION getLocalName(elem DOMElement) return varchar2 is
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlelementcover.getLocalName(elem.ID);
END getLocalName;

FUNCTION getExpandedName(elem DOMElement) return varchar2 is
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlelementcover.getExpandedName(elem.ID);
END getExpandedName;

FUNCTION getChildrenByTagName(elem DOMElement, name VARCHAR2) 
RETURN DOMNodeList IS
   children NUMBER;
   enl DOMNodeList;
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   children := xmlelementcover.getChildrenByTagName(elem.ID, name);
   enl.ID := children;
   return enl;
END getChildrenByTagName;

FUNCTION getChildrenByTagName(elem DOMElement, name VARCHAR2, ns VARCHAR2) 
RETURN DOMNodeList IS
   children NUMBER;
   enl DOMNodeList;
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   children := xmlelementcover.getChildrenByTagName(elem.ID, name, ns);
   enl.ID := children;
   return enl;
END getChildrenByTagName;

FUNCTION getElementsByTagName(elem DOMElement, name VARCHAR2, ns VARCHAR2) 
RETURN DOMNodeList IS
   elements NUMBER;
   enl DOMNodeList;
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   elements := xmlelementcover.getElementsByTagName(elem.ID, name, ns);
   enl.ID := elements;
   return enl;
END getElementsByTagName;

FUNCTION resolveNamespacePrefix(elem DOMElement, prefix varchar2) 
return varchar2 is
BEGIN
   if elem.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlelementcover.resolveNamespacePrefix(elem.ID, prefix);
END resolveNamespacePrefix;


/** 
 * Entity interface methods
 */
FUNCTION isNull(ent DOMEntity) RETURN BOOLEAN IS
BEGIN
   if ent.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(ent DOMEntity) RETURN DOMNode IS
   entnode DOMNode;
BEGIN
   if ent.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   entnode.ID := ent.ID;
   return entnode;
END makeNode;

FUNCTION getPublicId(ent DOMEntity) RETURN VARCHAR2 IS
BEGIN
   if ent.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlentitycover.getPublicId(ent.ID);
END getPublicId;

FUNCTION getSystemId(ent DOMEntity) RETURN VARCHAR2 IS
BEGIN
   if ent.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlentitycover.getSystemId(ent.ID);
END getSystemId;

FUNCTION getNotationName(ent DOMEntity) RETURN VARCHAR2 IS
BEGIN
   if ent.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlentitycover.getNotationName(ent.ID);
END getNotationName;

/** 
 * EntityReference interface methods
 */
FUNCTION isNull(eref DOMEntityReference) RETURN BOOLEAN IS
BEGIN
   if eref.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(eref DOMEntityReference) RETURN DOMNode IS
   erefnode DOMNode;
BEGIN
   if eref.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   erefnode.ID := eref.ID;
   return erefnode;
END makeNode;

/**
 * Notation interface methods
 */
FUNCTION isNull(n DOMNotation) RETURN BOOLEAN IS
BEGIN
   if n.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(n DOMNotation) RETURN DOMNode IS
   nnode DOMNode;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   nnode.ID := n.ID;
   return nnode;
END makeNode;

FUNCTION getPublicId(n DOMNotation) RETURN VARCHAR2 IS
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlnotationcover.getPublicId(n.ID);
END getPublicId;

FUNCTION getSystemId(n DOMNotation) RETURN VARCHAR2 IS
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlnotationcover.getSystemId(n.ID);
END getSystemId;

/**
 * ProcessingInstruction interface methods
 */
FUNCTION isNull(pi DOMProcessingInstruction) RETURN BOOLEAN IS
BEGIN
   if pi.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(pi DOMProcessingInstruction) RETURN DOMNode IS
   pinode DOMNode;
BEGIN
   if pi.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   pinode.ID := pi.ID;
   return pinode;
END makeNode;

FUNCTION getData(pi DOMProcessingInstruction) RETURN VARCHAR2 IS
   val VARCHAR2( 32000 );
   err number := - 1 ;
BEGIN
   if pi.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   val := xmlpicover.getData(pi.ID, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   return val;
END getData;

FUNCTION getTarget(pi DOMProcessingInstruction) RETURN VARCHAR2 IS
BEGIN
   if pi.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlpicover.getTarget(pi.ID);
END getTarget;

PROCEDURE setData(pi DOMProcessingInstruction, data IN VARCHAR2) IS
   err number := - 1 ;
BEGIN
   if pi.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmlpicover.setData(pi.ID, data, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
END setData;

/**
 * Text interface methods
 */ 
FUNCTION isNull(t DOMText) RETURN BOOLEAN IS
BEGIN
   if t.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(t DOMText) RETURN DOMNode IS
   tnode DOMNode;
BEGIN
   if t.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   tnode.ID := t.ID;
   return tnode;
END makeNode;

FUNCTION splitText(t DOMText, offset IN NUMBER) RETURN DOMText IS
   text NUMBER;
   ttext DOMText;
   err number := - 1 ;
BEGIN
   if t.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   text := xmltextcover.splitText(t.ID, offset, err);
   if err != - 1  then
      raise_dom_exception(err);
   end if;
   ttext.ID := text;
   return ttext;
END splitText;

/** 
 * Document interface methods
 */
FUNCTION isNull(doc DOMDocument) RETURN BOOLEAN IS
BEGIN
   if doc.ID = - 1  then
      return TRUE;
   else
      return FALSE;
   end if;
END isNull;

FUNCTION makeNode(doc DOMDocument) RETURN DOMNode IS
   docnode DOMNode;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   docnode.ID := doc.ID;
   return docnode;
END makeNode;

FUNCTION newDOMDocument RETURN DOMDocument IS
   doc DOMDocument;
BEGIN
   doc.ID := xmldocumentcover.newDocument;
   return doc;
END newDOMDocument;

FUNCTION getDoctype(doc DOMDocument) RETURN DOMDocumentType IS
   dtd NUMBER;
   ddt DOMDocumentType;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   dtd := xmldocumentcover.getDoctype(doc.ID);
   ddt.ID := dtd;
   return ddt;
END getDoctype;

FUNCTION getImplementation(doc DOMDocument) RETURN DOMImplementation IS
   impl NUMBER;
   idi DOMImplementation;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   impl := xmldocumentcover.getImplementation(doc.ID);
   idi.ID := impl;
   return idi;
END getImplementation;

FUNCTION getDocumentElement(doc DOMDocument) RETURN DOMElement IS
   docelem NUMBER;
   delem DOMElement;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   dbms_output.put_line('The id is' || doc.id);
   docelem := xmldocumentcover.getDocumentElement(doc.ID);
   dbms_output.put_line('The id is' || docelem);
   delem.ID := docelem;
   return delem;
END getDocumentElement;

FUNCTION createElement(doc DOMDocument, tagName IN VARCHAR2) 
RETURN DOMElement IS
   elem NUMBER;
   eelem DOMElement;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   elem := xmldocumentcover.createElement(doc.ID, tagName);
   eelem.ID := elem;
   return eelem;
END createElement;

FUNCTION createDocumentFragment(doc DOMDocument) 
RETURN DOMDocumentFragment IS
   df NUMBER;
   ddf DOMDocumentFragment;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   df := xmldocumentcover.createDocumentFragment(doc.ID);
   ddf.ID := df;
   return ddf;
END createDocumentFragment;

FUNCTION createTextNode(doc DOMDocument, data IN VARCHAR2) 
RETURN DOMText IS
   text NUMBER;
   ttext DOMText;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   text := xmldocumentcover.createTextNode(doc.ID, data);
   ttext.ID := text;
   return ttext;
END createTextNode;

FUNCTION createComment(doc DOMDocument, data IN VARCHAR2) 
RETURN DOMComment IS
   com NUMBER;
   ccom DOMComment;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   com := xmldocumentcover.createComment(doc.ID, data);
   ccom.ID := com;
   return ccom;
END createComment;

FUNCTION createCDATASection(doc DOMDocument, data IN VARCHAR2) 
RETURN DOMCDATASection IS
   cds NUMBER;
   ccds DOMCDATASection;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   cds := xmldocumentcover.createCDATASection(doc.ID, data);
   ccds.ID := cds;
   return ccds;
END createCDATASection;

FUNCTION createProcessingInstruction(doc DOMDocument, target IN VARCHAR2, 
                                     data IN VARCHAR2) 
RETURN DOMProcessingInstruction IS
   pi NUMBER;
   ppi DOMProcessingInstruction;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   pi := xmldocumentcover.createProcessingInstruction(doc.ID, target, data);
   ppi.ID := pi;
   return ppi;
END createProcessingInstruction;

FUNCTION createAttribute(doc DOMDocument, name IN VARCHAR2) 
RETURN DOMAttr IS
   attr NUMBER;
   aattr DOMAttr;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   attr := xmldocumentcover.createAttribute(doc.ID, name);
   aattr.ID := attr;
   return aattr;
END createAttribute;

FUNCTION createEntityReference(doc DOMDocument, name IN VARCHAR2) 
RETURN DOMEntityReference IS
   eref NUMBER;
   eeref DOMEntityReference;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   eref := xmldocumentcover.createEntityReference(doc.ID, name);
   eeref.ID := eref;
   return eeref;
END createEntityReference;

FUNCTION getElementsByTagName(doc DOMDocument, tagname IN VARCHAR2) 
RETURN DOMNodeList IS
   elems NUMBER;
   enl DOMNodeList;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   elems := xmldocumentcover.getElementsByTagName(doc.ID, tagname);
   enl.ID := elems;
   return enl;
END getElementsByTagName;

FUNCTION getVersion(doc DOMDocument) RETURN VARCHAR2 IS
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmldocumentcover.getVersion(doc.ID);
END getVersion;

PROCEDURE setVersion(doc DOMDocument, version VARCHAR2) IS
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldocumentcover.setVersion(doc.ID, version);
END setVersion;

FUNCTION getCharset(doc DOMDocument) RETURN VARCHAR2 IS
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmldocumentcover.getCharset(doc.ID);
END getCharset;

PROCEDURE setCharset(doc DOMDocument, charset VARCHAR2) IS
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldocumentcover.setCharset(doc.ID, charset);
END setCharset;

FUNCTION getStandalone(doc DOMDocument) RETURN VARCHAR2 IS
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmldocumentcover.getStandalone(doc.ID);
END getStandalone;

PROCEDURE setStandalone(doc DOMDocument, value VARCHAR2) IS
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldocumentcover.setStandalone(doc.ID, value);
END setStandalone;

PROCEDURE writeToFile(doc DOMDocument, fileName VARCHAR2) IS
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmldocumentcover.writeToFile(doc.ID, fileName, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeToFile;

PROCEDURE writeToBuffer(doc DOMDocument, buffer IN OUT VARCHAR2) IS
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmldocumentcover.writeToBuffer(doc.ID, buffer, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeToBuffer;

PROCEDURE writeToClob(doc DOMDocument, cl IN OUT CLOB) IS
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmldocumentcover.writeToClob(doc.ID, cl, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeToClob;

PROCEDURE writeToFile(doc DOMDocument, fileName VARCHAR2, charset VARCHAR2) IS
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldocumentcover.writeToFile(doc.ID, fileName, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeToFile;

PROCEDURE writeToBuffer(doc DOMDocument, buffer IN OUT VARCHAR2, 
                       charset VARCHAR2) IS
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldocumentcover.writeToBuffer(doc.ID, buffer, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeToBuffer;

PROCEDURE writeToClob(doc DOMDocument, cl IN OUT CLOB, charset VARCHAR2) IS
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldocumentcover.writeToClob(doc.ID, cl, charset, err);
   if err is not null then
      raise_app_error(CONN_ERR, err);
   end if;
END writeToClob;

PROCEDURE writeExternalDTDToFile(doc DOMDocument, fileName varchar2) is
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmldocumentcover.writeExternalDTDToFile(doc.ID, fileName, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeExternalDTDToFile;

PROCEDURE writeExternalDTDToBuffer(doc DOMDocument, buffer in out varchar2)
is
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmldocumentcover.writeExternalDTDToBuffer(doc.ID, buffer, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeExternalDTDToBuffer;

PROCEDURE writeExternalDTDToClob(doc DOMDocument, cl in out clob) is
   charset VARCHAR2( 64 );
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   select v$nls_parameters.value into charset from v$nls_parameters 
   where v$nls_parameters.parameter='NLS_CHARACTERSET';
   xmldocumentcover.writeExternalDTDToClob(doc.ID, cl, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeExternalDTDToClob;

PROCEDURE writeExternalDTDToFile(doc DOMDocument, fileName varchar2, 
                                 charset varchar2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldocumentcover.writeExternalDTDToFile(doc.ID, fileName, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeExternalDTDToFile;

PROCEDURE writeExternalDTDToBuffer(doc DOMDocument, buffer in out varchar2, 
                                   charset varchar2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldocumentcover.writeExternalDTDToBuffer(doc.ID, buffer, charset, err);
   if err is not null then
      raise_app_error(FILE_ERR, err);
   end if;
END writeExternalDTDToBuffer;

PROCEDURE writeExternalDTDToClob(doc DOMDocument, cl in out clob, 
                                 charset varchar2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if doc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xmldocumentcover.writeExternalDTDToClob(doc.ID, cl, charset, err);
   if err is not null then
      raise_app_error(CONN_ERR, err);
   end if;
END writeExternalDTDToClob;

end;
create or replace package sys.xslprocessor as

/**
 * Processor interface type
 */
TYPE Processor IS RECORD ( ID NUMBER NOT NULL := - 1 );

/**
 * Stylesheet interface type
 */
TYPE Stylesheet IS RECORD ( ID NUMBER NOT NULL := - 1 );

/**
 * Returns a new processor instance
 */
FUNCTION newProcessor RETURN Processor;

/**
 * Free XSL Processor
 */
PROCEDURE freeProcessor(p Processor);

/**
 * Transforms input XML document using given DOMDocument and stylesheet
 */
FUNCTION processXSL(p Processor, ss Stylesheet, 
                    xmldoc xmldom.DOMDocument)
return xmldom.DOMDocumentFragment;

/**
 * Transforms input XML document using given DOMDocument and stylesheet
 * and writes output to a file
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
                   xmldoc xmldom.DOMDocument, dir varchar2, fileName varchar2);

/**
 * Transforms input XML document using given DOMDocument and stylesheet
 * and writes output to a buffer
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
                    xmldoc xmldom.DOMDocument, buffer in out varchar2);

/**
 * Transforms input XML document using given DOMDocument and stylesheet
 * and writes output to a CLOB
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
                    xmldoc xmldom.DOMDocument, cl in out clob);

/**
 * Transforms input XML document fragment using given DOMDocumentFragment and 
 * stylesheet
 */
FUNCTION processXSL(p Processor, ss Stylesheet, 
                   xmldf xmldom.DOMDocumentFragment) 
return xmldom.DOMDocumentFragment;

/**
 * Transforms input XML document fragment using given DOMDocumentFragment 
 * and stylesheet and writes output to a file
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
            xmldf xmldom.DOMDocumentFragment, dir varchar2, fileName varchar2);

/**
 * Transforms input XML document fragment using given DOMDocumentFragment 
 * and stylesheet and writes output to a buffer
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
                    xmldf xmldom.DOMDocumentFragment, buffer in out varchar2);

/**
 * Transforms input XML document fragment using given DOMDocumentFragment 
 * and stylesheet and writes output to a CLOB
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
                    xmldf xmldom.DOMDocumentFragment, cl in out clob);

/**
 * Sets errors to be sent to the specified file
 */
PROCEDURE setErrorLog(p Processor, fileName VARCHAR2);

/**
 * Sets warnings TRUE - on, FALSE - off
 */
PROCEDURE showWarnings(p Processor, yes BOOLEAN);

/**
 * Create a new stylesheet using the given DOMDocument and reference URL
 */
FUNCTION newStylesheet(xmldoc xmldom.DOMDocument, ref varchar2) 
return Stylesheet;

/**
 * Create a new stylesheet using the given input and reference URLs
 */
FUNCTION newStylesheet(inp varchar2, ref varchar2) return Stylesheet;

PROCEDURE freeStylesheet(p Stylesheet);

/**
 * Sets the value of a top-level stylesheet parameter.
 * The parameter value is expected to be a valid XPath expression (note 
 * that string literal values would therefore have to be explicitly quoted).
 */
PROCEDURE setParam(ss Stylesheet, name VARCHAR2, value VARCHAR2);

/**
 * Remove a top-level stylesheet parameter.
 */
PROCEDURE removeParam(ss Stylesheet, name VARCHAR2);

/**
 * Resets the top-level stylesheet parameters.
 */
PROCEDURE resetParams(ss Stylesheet);

/**
 * Transforms a node in the tree using the given stylesheet
 */
FUNCTION transformNode(n xmldom.DOMNode, ss Stylesheet) 
return xmldom.DOMDocumentFragment;

/**
 * Selects nodes from the tree which match the given pattern
 */
FUNCTION selectNodes(n xmldom.DOMNode, pattern varchar2) 
return xmldom.DOMNodeList;

/**
 * Selects the first node from the tree that matches the given pattern
 */
FUNCTION selectSingleNode(n xmldom.DOMNode, pattern varchar2) 
return xmldom.DOMNode;

/**
 * Retrieves the value of the first node from the tree that matches the given 
 * pattern
 */
FUNCTION valueOf(n xmldom.DOMNode, pattern varchar2)
return VARCHAR2;

end xslprocessor;
create or replace package body sys.xslprocessor is

/**
 * Internal error
 */
INTERNAL_ERR CONSTANT NUMBER := - 20000 ;

/**
 * Other errors
 */
PROCESSOR_ERR CONSTANT NUMBER := - 20100 ;
FILE_ERR CONSTANT NUMBER := - 20101 ;
CONN_ERR CONSTANT NUMBER := - 20102 ;
NULL_ERR CONSTANT NUMBER := - 20103 ;

/**
 * Package private methods
 */
PROCEDURE raise_app_error(ecode NUMBER, emesg VARCHAR2 := null) IS
BEGIN
   if ecode = PROCESSOR_ERR then
      raise_application_error(ecode, 
                              'Error occurred while processing: ' || emesg);
   elsif ecode = FILE_ERR then
      raise_application_error(ecode, 
                              'Error occurred while accessing a file or URL: '
                              || emesg);
   elsif ecode = CONN_ERR then
      raise_application_error(ecode, 
                              'Error occurred while making connection: '
                              || emesg);
   elsif ecode = NULL_ERR then
      raise_application_error(ecode, 'Null input is not allowed');
   else
      raise_application_error(INTERNAL_ERR,
                              'An internal error has occurred: ' || emesg);
   end if;
END raise_app_error;

/**
 * Returns a new processor instance
 */
FUNCTION newProcessor RETURN Processor is
   proc Processor;
BEGIN
   proc.ID := xslprocessorcover.newProcessor;
   return proc;
END newProcessor;

/**
 * Transforms input XML document using given DOMDocument and stylesheet
 */
FUNCTION processXSL(p Processor, ss Stylesheet, xmldoc xmldom.DOMDocument) 
return xmldom.DOMDocumentFragment is
   err VARCHAR2( 512 ) := null;
   docfrag xmldom.DOMDocumentFragment := null;
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if xmldoc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   docfrag.ID := xslprocessorcover.processXSLFromDoc(p.ID, ss.ID, xmldoc.ID, 
                                                     err);

   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;

   return docfrag;
END processXSL;

/**
 * Transforms input XML document using given DOMDocument and stylesheet
 * and writes output to a file
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
            xmldoc xmldom.DOMDocument, dir varchar2, fileName varchar2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if xmldoc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   xslprocessorcover.processXSLFromDocToFile(p.ID, ss.ID, xmldoc.ID, 
                                          dir, filename, err);

   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;

END processXSL;

/**
 * Transforms input XML document using given DOMDocument and stylesheet
 * and writes output to a buffer
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
                    xmldoc xmldom.DOMDocument, buffer in out varchar2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if xmldoc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   xslprocessorcover.processXSLFromDocToBuffer(p.ID, ss.ID, xmldoc.ID, 
                                             buffer, err);

   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;

END processXSL;

/**
 * Transforms input XML document using given DOMDocument and stylesheet
 * and writes output to a CLOB
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
                    xmldoc xmldom.DOMDocument, cl in out clob) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if xmldoc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   xslprocessorcover.processXSLFromDocToClob(p.ID, ss.ID, xmldoc.ID, 
                                             cl, err);

   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;

END processXSL;

/**
 * Transforms input XML document fragment using given DOMDocumentFragment and 
 * stylesheet
 */
FUNCTION processXSL(p Processor, ss Stylesheet, 
                    xmldf xmldom.DOMDocumentFragment) 
return xmldom.DOMDocumentFragment is
   err VARCHAR2( 512 ) := null;
   docfrag xmldom.DOMDocumentFragment := null;
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if xmldf.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   docfrag.ID := xslprocessorcover.processXSLFromDoc(p.ID, ss.ID, xmldf.ID, 
                                                     err);

   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;

   return docfrag;
END processXSL;

/**
 * Transforms input XML document using given DOMDocumentFragment and stylesheet
 * and writes output to a file
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
         xmldf xmldom.DOMDocumentFragment, dir varchar2, fileName varchar2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if xmldf.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   xslprocessorcover.processXSLFromDocToFile(p.ID, ss.ID, xmldf.ID, 
                                         dir, filename, err);

   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;

END processXSL;

/**
 * Transforms input XML document using given DOMDocumentFragment and stylesheet
 * and writes output to a buffer
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
                   xmldf xmldom.DOMDocumentFragment, buffer in out varchar2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if xmldf.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   xslprocessorcover.processXSLFromDocToBuffer(p.ID, ss.ID, xmldf.ID, 
                                             buffer, err);

   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;

END processXSL;

/**
 * Transforms input XML document using given DOMDocumentFragment and stylesheet
 * and writes output to a CLOB
 */
PROCEDURE processXSL(p Processor, ss Stylesheet, 
                    xmldf xmldom.DOMDocumentFragment, cl in out clob) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if xmldf.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;

   xslprocessorcover.processXSLFromDocToClob(p.ID, ss.ID, xmldf.ID, 
                                             cl, err);

   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;

END processXSL;

/**
 * Sets errors to be sent to the specified file
 */
PROCEDURE setErrorLog(p Processor, fileName VARCHAR2) IS
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xslprocessorcover.setErrorLog(p.ID, fileName);
END setErrorLog;

/**
 * Sets warnings TRUE - on, FALSE - off
 */
PROCEDURE showWarnings(p Processor, yes BOOLEAN) IS
   warn NUMBER;
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   if yes = TRUE then
      warn :=  1 ;
   else
      warn :=  0 ;
   end if;
   xslprocessorcover.showWarnings(p.ID, warn);
END showWarnings;

/**
 * Free the processor
 */
PROCEDURE freeProcessor(p Processor) IS
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xslprocessorcover.freeProcessor(p.ID);
END freeProcessor;
   
PROCEDURE freeStylesheet(p Stylesheet) IS
BEGIN
   if p.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xslstylesheetcover.freeStylesheet(p.ID);
END freeStylesheet;

/**
 * Create a new stylesheet using the given DOMDocument and reference URL
 */
FUNCTION newStylesheet(xmldoc xmldom.DOMDocument, ref varchar2) 
return Stylesheet is
   err VARCHAR2( 512 ) := null;
   ss  Stylesheet;
BEGIN
   if xmldoc.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   ss.ID := xslstylesheetcover.newStylesheetFromDoc(xmldoc.ID, ref, err);
   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;
   return ss;
END newStylesheet;

/**
 * Create a new stylesheet using the given input and reference URLs
 */
FUNCTION newStylesheet(inp varchar2, ref varchar2) return Stylesheet is
   err VARCHAR2( 512 ) := null;
   ss  Stylesheet;
BEGIN
   ss.ID := xslstylesheetcover.newStylesheetFromURL(inp, ref, err);
   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;
   return ss;
END newStylesheet;

/**
 * Sets the value of a top-level stylesheet parameter.
 * The parameter value is expected to be a valid XPath expression (note 
 * that string literal values would therefore have to be explicitly quoted).
 */
PROCEDURE setParam(ss Stylesheet, name VARCHAR2, value VARCHAR2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xslstylesheetcover.setParam(ss.ID, name, value, err);
   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;
END setParam;
   
/**
 * Remove the top-level stylesheet parameter.
 */
PROCEDURE removeParam(ss Stylesheet, name VARCHAR2) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xslstylesheetcover.removeParam(ss.ID, name, err);
   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;
END removeParam;
   
/**
 * Resets the top-level stylesheet parameters.
 */
PROCEDURE resetParams(ss Stylesheet) is
   err VARCHAR2( 512 ) := null;
BEGIN
   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   xslstylesheetcover.resetParams(ss.ID, err);
   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;
END resetParams;
   
/**
 * Transforms a node using the given stylesheet
 */
FUNCTION transformNode(n xmldom.DOMNode, ss Stylesheet) 
return xmldom.DOMDocumentFragment is
   err VARCHAR2( 512 ) := null;
   df  xmldom.DOMDocumentFragment;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   if ss.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   df.ID := xmlnodecover.transformNode(n.ID, ss.ID, err);
   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;
   return df;
END transformNode;

/**
 * Selects nodes from the tree which match the given pattern
 */
FUNCTION selectNodes(n xmldom.DOMNode, pattern varchar2)
return xmldom.DOMNodeList is
   err VARCHAR2( 512 ) := null;
   nl  xmldom.DOMNodeList;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   nl.ID := xmlnodecover.selectNodes(n.ID, pattern, err);
   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;
   return nl;
END selectNodes;

/**
 * Selects the first node from the tree that matches the given pattern
 */
FUNCTION selectSingleNode(n xmldom.DOMNode, pattern varchar2) 
return xmldom.DOMNode is
   err VARCHAR2( 512 ) := null;
   res xmldom.DOMNode;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   res.ID := xmlnodecover.selectSingleNode(n.ID, pattern, err);
   if err is not null then
      raise_app_error(PROCESSOR_ERR, err);
   end if;
   return res;
END selectSingleNode;

/**
 * Selects the value of the first node from the tree that matches the given 
 * pattern
 */
FUNCTION valueOf(n xmldom.DOMNode, pattern varchar2)
return VARCHAR2 is
   err VARCHAR2( 512 ) := null;
BEGIN
   if n.ID = - 1  then
      raise_app_error(NULL_ERR);
   end if;
   return xmlnodecover.valueOf(n.ID, pattern, err);
END valueOf;

end;
...
Рейтинг: 0 / 0
Как в 8i при генерации XML из SELECT....
    #32147383
Аргамак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
v_xml :='<IF_REPLY>' 
||'<SERVICE_NAME>' || v_service_name || '</SERVICE_NAME>' 
||'<REQUEST_STATUS>' 
||'<STATUS>' || v_status || '</STATUS>' 
||'<STATUS_CODE>' || to_char(v_status_code) || '</STATUS_CODE>' 
||'<STATUS_MESSAGE>' || v_status_message || '</STATUS_MESSAGE>' 
||'</REQUEST_STATUS><REQUEST_RESULT>' || v_request_result 
||'</REQUEST_RESULT></IF_REPLY>'; 
Return (v_xml); 
Это ни совсем то...

Код: plaintext
select xmlgen.getxml('select * from city') from dual;

Как все-таки сделать из
[SRC http]<ROW num="11">
<CITY_ID>42</CITY_ID>
<NAME>Багдад</NAME>
<REGION_ID>22</REGION_ID>
</ROW>

следующее
<ROW CITY_ID=42 NAME="Багдад" REGION_ID=22
</ROW>[/SRC]
...
Рейтинг: 0 / 0
Как в 8i при генерации XML из SELECT....
    #32147391
Аргамак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо конечно за пакеты...
а что их в исходном виде в инсталльниках нет?
Ты мне их предлагаешь из под сиса самому поставить?
Почему он не поставился при инсталляции?
И это версии пакетов от четвертого патча?
...
Рейтинг: 0 / 0
Как в 8i при генерации XML из SELECT....
    #32147466
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, что если ты хочешь получить XML с требуемыми именно тебе атрибутами, элементами и т.п, то придется или набрать строку, после чего, пропарсив ее, получить DOM, либо наполнять поэлементно DOM самому. DBMS_XMLGEN, на мой взгляд, из серии "дешево и сердито", если охота получить XML любого вида - создавай его сам. Посмотри на пакет DBMS_XMLDOM, может быть он поможет: http://technet.oracle.com/docs/products/oracle9i/doc_library/release2/appdev.920/a96616/arxml25.htm

Я как-то, за неимением времени, вывернулся так: формирую DOM в Java, загрузил свои классы в Oracle и вызываю их оттуда.
...
Рейтинг: 0 / 0
Как в 8i при генерации XML из SELECT....
    #32147489
Аргамак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. А что в 8i мне его (и xslprocessor) только руками можно поставить?
2. select a "@a" from a
в 9i дает нужный эффект, а в 8i НА АМПЕРСАНД ругается....
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как в 8i при генерации XML из SELECT....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]