Содержание
- 2. Пространство имен в XML документе Прежде чем рассмотреть подробно метод startElement, рассмотрим понятие пространства имен. Концептуально,
- 3. xmlns:lit=“http://www.literarysociety.org/books” xmlns:addr=“http://www.usps.com/addresses”> . . . My Life in the Bush of Ghosts . . . Ms.
- 4. Этот документ определяет два пространства имён: префикс lit ассоциируется со строкой http://www.literarysociety.org/books; префикс addr ассоциируется со
- 5. Когда определяется пространства имён на данном элементе, эти пространства имён могут быть использованы этим элементом и
- 6. xmlns:addr="http://www.usps.com/addresses"> Ms. Linda Lovely . . .
- 7. Когда используется префикс пространства имён, пространство имён, ассоциируемое с этим префиксом, должно быть определено в этом
- 8. Shakespeare William British 1564 1616
- 9. Так как ни у одного из этих элементов нет префикса пространства имён, анализатор, поддерживающий пространства имён,
- 10. Когда проверяется верность пространства имён для данного элемента, необходимо проверить строку пространства имён, а не префикс
- 11. Метод startElement Рассмотрим подробнее интерфейс метода startElement. void startElement(String uri, String localName, String qName, Attributes attrs)
- 12. Следует помнить, что атрибуты никогда не находятся в пространстве имен по умолчанию. Список Attributes имеет методы,
- 13. ... try { SAXParserFactory spfactory = SAXParserFactory.newInstance(); spfactory.setValidating(true); spfactory.setNamespaceAware(true); SAXParser saxParser = spfactory.newSAXParser(); ...} catch(….){…..} ………………
- 14. Древовидная модель DOM DOM (Dynamic object model) представляет собой некоторый общий интерфейс для работы со структурой
- 15. Основным объектом DOM является Node – некоторый общий элемент дерева. Большинство DOM-объектов унаследовано именно от Node.
- 16. getParentNode() – возвращает объект, являющийся родителем текущего узла Node; getChildNodes() – возвращает список объектов, являющихся дочерними
- 17. hasChildNodes() – возвращает true если существуют дочерние узлы. getChildNodes() - возвращает дочерние элементы(возвращает объект класса NodeList)
- 18. Интерфейс Document. getElementsByTagName(String) - в качестве параметра задается имя элемента, метод возвращает объект класса NodeList (среди
- 19. Рассмотрим разбор документа notepad.xml (будем использовать анализатор XML4J от IBM). import org.w3c.dom.Element; import org.w3c.dom.Document; import org.w3c.dom.Node;
- 20. public class MyDOMDemo { public static String getValue(Element e, String name) { NodeList nList = e.getElementsByTagName(name);
- 21. for (int i = 0; i noteElem = (Element) noteList.item(i); Myclass e = new Myclass(); NodeList
- 22. e.address.setStreet(getValue(n, "street")); e.address.setCountry(getValue(n, "country")); e.address.setCity(getValue(n, "city")); entries.add(e); } } catch (Exception e) {System.out.println(e);} for (int i
- 23. import org.jdom.*; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; import java.util.*; import java.io.FileOutputStream; public class JDOMChanger { static void
- 24. for (int i=0; i Element e = (Element) c.item(i); if (e.getAttributeValue("login").equals(login)) { e.getChild(element).setText(content); } } XMLOutputter
- 25. Рассмотрим преобразование файла notepad.xml в html файл с использованием notepad.xsl, который имеет вид Notepad Contents Login
- 26. Соответствующий код будет иметь вид: import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import
- 27. public class SimpleTransform { public static void main(String[] args) { try { TransformerFactory tFact = TransformerFactory.newInstance();
- 28. В результате получится HTML-документ следующего вида: charset=UTF-8"> Notepad Contents Login Name Street rom Valera Main Str.,
- 29. Рассмотрим проверку документа на корректность средствами языка Java. import java.io.IOException; import org.xml.sax.SAXException; import org.apache.xerces.parsers.DOMParser; import org.xml.sax.SAXNotRecognizedException;
- 30. public class XSDMain { public static void main(String[] args) { String filename = "students.xml"; DOMParser parser
- 31. Обработчик ошибок MyErrorHandler имеет вид: import java.io.IOException; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXParseException; import org.apache.log4j.FileAppender; import org.apache.log4j.Logger; import
- 32. public class MyErrorHandler implements ErrorHandler { private Logger logger; public MyErrorHandler(String log) throws IOException { //создание
- 33. public void warning(SAXParseException e) { logger.warn(getLineAddress(e) + "-" + e.getMessage()); } public void error(SAXParseException e) {
- 34. Маршалинг и Демаршалинг Маршаллизация - это процесс преобразования находящихся в памяти данных в формат их хранения.
- 35. Демаршаллизация - это процесс преобразования данных из формата среды хранения в память, т.е. процесс, прямо противоположный
- 36. Кругооборот данных(round-tripping) является важным термином связывания данных. Понятие кругооборота данных используется для описания полного цикла перемещения
- 37. Рассмотрим пример маршализации: class Myclass{ public int a; public Myclass(){a=10;}} @XmlRootElement class Employee { private String
- 38. class Main { public static void main(String[] args){ try{ JAXBContext context = JAXBContext.newInstance( Employee.class); Marshaller m
- 39. @XmlRootElement – аннотация использующаяся вместе с классом верхнего уровня или с перечислением. Если класс или перечисление
- 40. JAXB_FORMATTED_OUTPUT – данное свойство говорит о том, что данные записываются в xml файл в форматированном виде.
- 41. Файл my.xml примет вид: 10 CA Cath 300
- 42. Демаршализация будет иметь вид: class Myclass{ public int a; public Myclass(){a=10;} } @XmlRootElement class Employee {
- 43. class Main { public static void main(String[] args){ try{ JAXBContext context = JAXBContext. newInstance(Employee.class); Unmarshaller m
- 44. Демаршалинг можно автоматизировать при наличии xsd файла. Рассмотрим файл my.xsd, соответствующий классам Employee и Myclass:
- 45. Генерируем java код соответствующий xsd файлу xjc –nv my.xsd –d src (xjc находится в той же
- 46. Файл Employee.java имеет вид: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "code", "name", "m", "salary" })
- 47. public String getCode() { return code; } public void setCode(String value) {this.code = value; } public
- 48. Файл Myclass.java имеет вид: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "Myclass", propOrder = { "a" }) public class Myclass
- 49. Файл ObjectFactory.java имеет вид: import javax.xml.bind.annotation.XmlRegistry; public class ObjectFactory { public ObjectFactory() { } public Myclass
- 50. Тогда демаршализация будет иметь вид: class Main { public static void main(String[] args){ try{ JAXBContext context
- 51. Примечание: для того, чтобы не было исключения, необходимо убрать в аннотации @XmlRootElement(name = "Employee"), часть name
- 52. Потоки ввода-вывода Для того чтобы отвлечься от особенностей конкретных устройств ввода/вывода, в Java употребляется понятие потока
- 53. Полное игнорирование особенностей устройств ввода/вывода сильно замедляет передачу информации. Поэтому в Java выделяется файловый ввод/вывод, вывод
- 54. Потоки out и err — это экземпляры класса Printstream, организующего выходной поток байтов. Эти экземпляры выводят
- 55. В Java предусмотрена возможность создания потоков, направляющих символы или байты не на внешнее устройство, а в
- 56. Классы входных потоков Reader и InputStream определяют по три метода ввода: read() — возвращает один символ
- 57. long skip(long n) "проматывает" поток с текущей позиции на n символов или байтов вперед. Метод возвращает
- 58. Классы выходных потоков Writer и OutputStream определяют по три почти одинаковых метода вывода: write (char[] buf)
- 59. В классе Writer есть еще два метода: write (String s) — выводит строку s в выходной
- 60. Классы, входящие в иерархию символьных потоков ввода/вывода:
- 61. Классы, входящие в иерархию байтовых потоков потоков ввода/вывода:
- 62. Пример. Консольный ввод/вывод. import java.io.*; public class Main2 { public static void main(String[] args) { try{
- 63. pw.println("Посимвольный ввод:"); while((c = br.read()) != -1) pw.println((char)c); pw.println("Построчный ввод:"); do{ s = br.readLine(); pw.println(s);} while(!s.equals("q"));}
- 64. Пример. Работа с файлами: import java.io.*; class FileTest{ public static void main(String[] args){ try{ PrintWriter pw
- 65. File d = new File("C:\\Windows"); pw.println("Содержимое каталога:"); if (d.exists() && d.isDirectory()) { String[] s = d.list();
- 66. Пример. Буферизованный ввод/вывод. import java.io.*; class FileTest1{ public static void main(String[] args){ try{ BufferedReader br =
- 67. Пример. Поток простых типов Java import java.io.*; class Data1{ public static void main(String[] args) throws IOException{
- 68. DataInputStream dis = new DataInputStream ( new FileInputStream("fib.txt")); while(true) try{ a = dis.readInt(); System.out.print(a + "
- 69. Каналы обмена информацией Канал обмена информацией строится следующим образом. В одном процессе — источнике информации —
- 70. Пример. import java.io.*; class Target extends Thread{ private PipedReader pr; Target(PipedWriter pw){ try{ pr = new
- 71. class Source extends Thread{ private PipedWriter pw; Source (){ pw = new PipedWriter();} PipedWriter getStream(){ return
- 72. public class Pipe{ public static void main(String[] args){ Source s = new Source(); Target t =
- 73. Сокеты в Java Процесс установления связи между сервером и клиентом имеет вид
- 74. В Java для сетевого программирования существует специальный пакет "java.net", содержащий класс java.net.Socket. Гнёзда монтируются на порт
- 75. Клиентский сокет Сокет инициализируется следующим образом: public Socket(String host, int port) throws UnknownHostException, IOException Также полезной
- 76. Сокет сервера Для инициализации сокета на сервере удобно использовать функцию public ServerSocket(int port, int backlog, InetAddress
- 77. TCP/IP клиент import java.io.*; import java.net.*; class SampleClient extends Thread { public static void main(String args[])
- 78. // читаем ответ byte buf[] = new byte[64*1024]; int r = s.getInputStream().read(buf); String data = new
- 79. TCP/IP сервер import java.io.*; import java.net.*; class SampleServer extends Thread { Socket s; int num; public
- 80. catch(Exception e) { System.out.println("init error: "+e); } } public SampleServer(int num, Socket s) { // копируем
- 81. public void run() { try { // из сокета клиента берём поток входящих данных InputStream is
- 83. Скачать презентацию