Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВСхнология XSLTΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 94

Автор АлСксСй Π’Π°Π»ΠΈΠΊΠΎΠ²

 -- ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ CLOB-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прСобразования

 SELECT STYLESHEET.CONTENT

 INTO stylesheetCLOB

 FROM STYLESHEET, SOURCE

 WHERE SOURCE.ID = sourceID AND SOURCE.STYLESHEETID = STYLESHEET.ID;


 -- Если хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ - NULL, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ

 -- ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ NULL

 IF sourceCLOB IS NULL OR stylesheetCLOB IS NULL THEN

  RETURN NULL;

 END IF;


 -- Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ CLOB-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ входящСго Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

 XMLPARSER.parseCLOB(parser, sourceCLOB);

 sourceXML := XMLPARSER.getDocument(parser);


 -- Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ CLOB-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° прСобразования

 XMLPARSER.parseCLOB(parser, stylesheetCLOB);

 stylesheetXML := XMLPARSER.getDocument(parser);


 -- Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ прСобразования

 stylesheet := XSLPROCESSOR.newStylesheet(stylesheetXML, NULL);


 -- ВыполняСм ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅

 XSLPROCESSOR.processXSL(processor, stylesheet, sourceXML, result);


 -- ОсвобоТдаСм рСсурсы

 XSLPROCESSOR.freeProcessor(processor);

 XMLPARSER.freeParser(parser);

 XMLDOM.freeDocument(sourceXML);

 XMLDOM.freeDocument(stylesheetXML);

 RETURN result;


 -- ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

 EXCEPTION


  -- Если Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация

  WHEN OTHERS THEN

   -- ОсвобоТдаСм рСсурсы

   XSLPROCESSOR.freeProcessor(processor);

   XMLPARSER.freeParser(parser);

   XMLDOM.freeDocument(sourceXML);

   XMLDOM.freeDocument(stylesheetXML);


  -- ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ дальшС

  RAISE;

END;

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описано ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ элСмСнтарно.

Листинг 9.20. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ PROCESSED_SOURCE

CREATE OR REPLACE VIEW PROCESSED_SOURCE AS

SELECT ID, PROCESS(ID) AS CONTENT

FROM SOURCE;

ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PROCESS ΠΈ прСдставлСния PROCESS_SOURCE Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π²ΡƒΡ… запросов.

Листинг 9.21. Запросы ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ SOURCE ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ PROCESSED_SOURCE

SQL> SELECT * FROM SOURCE;


ID  CONTENT       STYLESHEETID

--  ------------  ------------

1   <A>value</A>  1


SQL> SELECT * FROM PROCESSED_SOURCE;


ID CONTENT

-- -------------------------------------------------------

1  <?xml version = '1.0' encoding = 'UTF-8'?> <B>value</B>

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ XSLT-ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π² Java

Π―Π·Ρ‹ΠΊ Java Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ XML-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π² этой области рСализуСтся, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, сначала Π½Π° Java ΠΈ ΡƒΠΆ Π·Π°Ρ‚Π΅ΠΌ пСрСносится Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

НС стал ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ XSLT. МоТно смСло ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ количСство XSLT-срСдств, написанных Π½Π° Java, прСвосходит ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ Π²ΠΎΠΎΠ±Ρ‰Π΅ всСх ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² настоящСС врСмя XSLT-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС XSLT Π² Java, ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” сСрвСрного прилоТСния (сСрвлСта), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎ запросу ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ HTTP-сСансС Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ HTML.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сСрвлСта ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ "Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ". Π’ Π½Π΅ΠΌ HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ создаСтся сСриСй инструкций out.println(...), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выводят Π² выходящий ΠΏΠΎΡ‚ΠΎΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ‡Π΅Π½Π½ΡƒΡŽ HTML-Ρ‚Π΅Π³Π°ΠΌΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ сСансС.

Листинг 9.22. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сСрвлСта

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;


public class example extends HttpServlet {

 /**

 * Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ.

 */

 public void init(ServletConfig config) throws ServletException {

  super.init(config);

 }


 /**

 * Основной ΠΌΠ΅Ρ‚ΠΎΠ΄ сСрвлСта

 */

 public void service(HttpServletRequest request,

  HttpServletResponse response)

  throws ServletException, IOException {

  // ВыставляСм Ρ‚ΠΈΠΏ содСрТимого

  response.setContentType("text/html");

  // Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ выходящий ΠΏΠΎΡ‚ΠΎΠΊ

  OutputStreamWriter osw =

   new OutputStreamWriter(response.getOutputStream());

  PrintWriter out = new PrintWriter (response.getOutputStream());

  // ВыполняСм Π²Ρ‹Π²ΠΎΠ΄ HTML-страницы

  out.println("<html>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π³ΠΎΠ»ΠΎΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

  out.println(" <head>");

  out.println("  <title>Request information</title>");

  out.println(" </head>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ‚Π΅Π»ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

  out.println(" <body>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ запросС

  out.println("  <h1>General information</h1>");

  out.println("  <table>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ имя сСрвСра

  out.println("   <tr>");

  out.println("    <td>Server name</td>");

  out.println("    <td>" + request.getServerName() + "</td>");

  out.println("   </tr>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΡ€Ρ‚ сСрвСра

  out.println("   <tr>");

  out.println("    <td>Server port</td>");

  out.println("    <td>" + request.getServerPort() + "</td>");

  out.println("   </tr>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ адрСс Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ стороны

  out.println("   <tr>");

  out.println("    <td>Remote address</td>") ;

  out.println("    <td>" + request.getRemoteAddr() + "</td>");

  out.println("   </tr>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° запроса

  out.println("   <tr>");

  out.println("    <td>Protocol</td>");

  out.println("    <td>" + request.getProtocol() + "</td>");

  out.println("   </tr>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ запроса

  out.println("   <tr>") ;

  out.println("    <td>Method</td>");

  out.println("    <td>" + request.getMethod() + "</td>");

  out.println("   </tr>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ URI запроса

  out.println("   <tr>");

  out.println("    <td>Request URI</td>");

  out.println("    <td>" + request.getRequestURI() + "</td>");

  out.println("   </tr>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ строку запроса

  out.println("   <tr>");

  out.println("    <td>Query String</td>");

  out.println("    <td>" + request.getQueryString() + "</td>");

  out.println("   </tr>");

  out.println("  </table>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса

  out.println("  <h1>Request parameters</h1>");

  out.println("  <table>");

  for (Enumeration e = request.getParameterNames();

   e.hasMoreElements();) {

   String name = e.nextElement().toString();

   String[] values = request.getParameterValues(name);

   for (int i=0; i < values.length; i++) {

    out.println("   <tr>");

    out.println("    <td>" + name + "</td>");

    out.println("    <td>" + values[i] + "</td>");

    out.println("   </tr>");

   }

  }

  out.println("  </table>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ HTTP-сСссии

  out.println("  <h1>Session parameters</h1>");

  out.println("  <table>");

  HttpSession session = request.getSession(true);

  String[] names = session.getValueNames();

  for (int i=0; i < names.length; i++) {

   String name = session.getValueNames()[i];

   out.println("   <tr>");

   out.println("    <td>" + name + "</td>");

   out.println("    <td>" +

   session.getValue(name).toString() + "</td>");

   out.println("   </tr>");

  }

  out.println("  </table>");

  // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ cookies

  response.addCookie(new Cookie("content", "apple jam"));

  out.println("  <h1>Cookies</h1>");

  out.println("  <table>");

  Cookie[] cookies = request.getCookies();

  for (int i=0; i < cookies.length; i++) {

   out.println("   <tr>");

   out.println("    <td>" + cookies[i].getName() + "</td>");

   out.println("    <td>" + cookies[i].getValue() + "</td>");

   out.println("   </tr>");

  }

  out.println("  </table>");

  out.println(" </body>");

  out.println("</html>");

  // Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ выходящий ΠΏΠΎΡ‚ΠΎΠΊ

  out.close();

 }

}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ обращСния ΠΊ этому сСрвлСту ΠΏΠΎ URL Π²ΠΈΠ΄Π°

http://localhost/servlet/example?x=1&y=2&z=3&x=4&y=5&z=6

Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ прСдставлСнному Π½Π° рис. 9.13.

Рис. 9.13. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ обращСния ΠΊ сСрвлСту

НСслоТно Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, насколько ТСстко Π² этом сСрвлСтС Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π° прСзСнтация Π΄Π°Π½Π½Ρ‹Ρ…: для минимального измСнСния Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° придСтся Π² ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ порядкС ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ сам сСрвлСт, Ρ‡Ρ‚ΠΎ Π² соврСмСнных систСмах ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€ΠΎΡΠΊΠΎΡˆΡŒΡŽ, β€” всС Ρ€Π°Π²Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠΎΡ‚ΠΎΡ€ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого сСрвлСта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠΌ Π½ΠΈΠΆΠ΅, дСмонстрируСт, ΠΊΠ°ΠΊ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ XSLT ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡ… ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. ИдСя ΠΎΡ‡Π΅Π½ΡŒ проста: вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ТСстко Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² выходящий ΠΏΠΎΡ‚ΠΎΠΊ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² Π²ΠΈΠ΄Π΅ DOM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ XSLT-ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ создаст для Π½Π΅Π³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ HTML-прСдставлСниС.

Π’ этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ сСрвлСта ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Java-Π²Π΅Ρ€ΡΠΈΡŽ XML-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Oracle XDK (Oracle XML SDK, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ XML-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, созданная Π² Oracle Corp.). Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ· этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ XSLT-процСссор (класс XSLProcessor) ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ DOM-ΠΌΠΎΠ΄Π΅Π»ΠΈ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (класс XMLDocument). Π’ΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Java-Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ стандартных интСрфСйсов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° DOM, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ΠšΠΎΠ½ΡΠΎΡ€Ρ†ΠΈΡƒΠΌΠΎΠΌ W3. DOM-интСрфСйсы позволят Π½Π°ΠΌ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ: ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π° ΡƒΠ·Π»Ρ‹ элСмСнтов, тСкстовыС ΡƒΠ·Π»Ρ‹ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.