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;