
- •По курсу «Интернет-программирование»
- •Принципы построения xml
- •Кратко об xml
- •Разметка xml документа
- •Правила описания элементов и атрибутов
- •Обработка xml
- •Библиотеки обработки xml
- •Разбор xml с помощьюPhp
- •Разбор xml с помощьюJavaScript
- •Разбор xml с помощью Java
- •Объект xmlHttpRequest
- •Кроссбраузерное создание объекта запроса
- •Использование xmlhttpRequest
- •Синхронный xmlHttpRequest
- •Асинхронный xmlHttpRequest
- •Не используйте синхронные запросы
- •Методы объекта xmlHttpRequest
- •Свойства объекта xmlHttpRequest
- •Get и post-запросы. Кодировка.
- •Запросы multipart/form-data
- •Кодировка (языковая)
Разбор xml с помощью Java
Загрузка пакетов:
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
Загрузка XML файла:
Создание объекта анализатора
DocumentBuildFactory factory = DocumentBuildFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Разбор документа:
File f = ...;
Document doc = builder.parse(f);
Извлечение корневого элемента
Element root = doc.getDocumentElement();
XML пример:
<?xml version="1.0">
<font>
...
</font>
root — объект-элемент «font».
Получение тега элемента:
String tagName = root.getTagName(); // «font»
Перечисление суб-элементов
NodeList children = root.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child instance of Element) {
Element childElement = (Element) child;
// Действия с childElement
}
}
Извлечение текстового содержимого элементов
. . .
Element childElement = (Element) child;
Text textNode = childElement.getFirstChild();
String text = textNode.getData().trim();
...
Извлечение атрибутов
NamedNodeMap attributes = element.getAttributes();
for (int i = 0; i < attributes.getLength(); i++)
{
Node attributeNode = attributes.item(i);
String name = attributeNode.getNodeName();
String value = attributeNode.getNodeValue();
}
или:
String unit = element.getAttribute("unit");
Валидация
factory.setValidating(true);
Пример использования
Код 3. Получение значений атрибутов id и year из файла portfolio.xml
package javatest;
import java.io.IOException;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
public class JavaTest {
public static void main(String[] args) throws IOException {
try {
// Создается "построитель" документа
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
// Создается дерево DOM документа из файла
Document document = documentBuilder.parse("src/javatest/portfolio.xml");
// Получаем корневой элемент
Node root = document.getDocumentElement();
System.out.println("List of projects:\n");
// Просматриваем все подэлементы корневого - т.е. проекты
NodeList projects = root.getChildNodes();
for (int i = 0; i < projects.getLength(); i++) {
Node project = projects.item(i);
// Если нода не текст, то это проект - заходим внутрь
if (project.getNodeType() != Node.TEXT_NODE) {
//Получаем все атрибуты
NamedNodeMap attributes = project.getAttributes();
for (int j = 0; j < attributes.getLength(); j++)
{
Node attributeNode = attributes.item(j);
String name = attributeNode.getNodeName();
String value = attributeNode.getNodeValue();
System.out.println(name+"="+value);
}
System.out.println("===========>>>>");
}
}
} catch (ParserConfigurationException ex) {
ex.printStackTrace(System.out);
} catch (SAXException ex) {
ex.printStackTrace(System.out);
} catch (IOException ex) {
ex.printStackTrace(System.out);
}
}
}
Задание на лабораторную работу
Для выбранного языка (JavaScript, PHP или Java) реализовать отображение значений элементов и их атрибутов из файла portfolio.xml в соответствии с заданием. В случае отсутствия данных выводить строку «не найдено».
1 |
Отобразить в виде HТML документа: номер проекта, год проекта, заголовок проекта и всех авторов проекта. |
2 |
Отобразить в виде HТML документа: номер проекта, год проекта, заголовок проекта и картинку проекта. |
3 |
Отобразить в виде HТML документа: номер проекта, год проекта, заголовок проекта и json файл проекта. |
Для МП на базе выборок по своему варианту сформировать JSON файл вида:
{
“имя_элеметна”: {
“attributes”: {
“имя_атрибута”:“значение атрибута”, ...
},
“value”:“значение элемента” // если есть значение и нет вложенных элементов
// или если есть вложенные элементы
“value”:{
“имя_элемента”: … ,
...
}
}
}
Пример:
{
“project”: {
“attributes”: { “id”:“01”, “year”:1678 },
“value”:{
“title”:“Первый проект”,
“annotation”:“Лучший проект”
}
}
}
Создавать JSON можно как обычными средствами создания строк, так и с использованием объектов языка:
PHP
Функция json_encode()
Пример:
<?php $arr = array('id'=>'000001', 'year'=>1997, 'value'=>array('title'=>'First project', 'annotation'=>'Best Project')); echo json_encode($arr); ?>
Результат:
{
"id":"000001",
"year":1997,
"value":{
"title":"First project",
"annotation":"Best Project"
}
}
JAVA
Можно использовать библиотеку: org.json.simple (загружена в папку Интернет-программирование/soft)
Примеры:
import org.json.simple.*;
JSONObject resultJson = new JSONObject();
JSONObject obj = new JSONObject();
resultJson.put("project","first");
resultJson.put("id",new Integer(100));
resultJson.put("annotation","Best Project");
obj.put("title","First project");
resultJson.put("values",obj);
System.out.print(resultJson.toString());
Результат:
{
"annotation":"Best Project",
"values":{
"title":"First project"
},
"project":"first",
"id":100
}
JavaScript
Поскольку JSON по сути является объектом JavaScript, то создается JSON также как эти объекты:
var Test = {};
Test.title = 'FirstProject';
alert(Test.title); // FirstProject
Контрольные вопросы:
Что такое XML-документ?
Что такое DTD. Как оно устроено?
Что такое XML-схема? Как оно устроено?
Что такое правильный XML-документ?
Что такое валидный XML-документ?
Как осуществить переход по узлам DOM-объекта XML документа?
Как проверить валидность документа в PHP и Java?
В чем преимущества XML-схемы по сравнению с DTD?
При подготовке ответов на вопросы можно использовать материалы лекции
Приложение 1
Документация по объекту XMLHttpRequest
Источник: http://xmlhttprequest.ru/