Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
179
Добавлен:
17.04.2018
Размер:
254.46 Кб
Скачать
    1. Разбор xml с помощью Java

      1. Загрузка пакетов:

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

      1. Загрузка XML файла:

Создание объекта анализатора

DocumentBuildFactory factory = DocumentBuildFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Разбор документа:

File f = ...;

Document doc = builder.parse(f);

      1. Извлечение корневого элемента

Element root = doc.getDocumentElement();

XML пример:

<?xml version="1.0">

<font>

...

</font>

root — объект-элемент «font».

Получение тега элемента:

String tagName = root.getTagName(); // «font»

      1. Перечисление суб-элементов

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

}

}

      1. Извлечение текстового содержимого элементов

. . .

Element childElement = (Element) child;

Text textNode = childElement.getFirstChild();

String text = textNode.getData().trim();

...

      1. Извлечение атрибутов

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");

      1. Валидация

factory.setValidating(true);

      1. Пример использования

Код 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 можно как обычными средствами создания строк, так и с использованием объектов языка:

      1. 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

Контрольные вопросы:

  1. Что такое XML-документ?

  2. Что такое DTD. Как оно устроено?

  3. Что такое XML-схема? Как оно устроено?

  4. Что такое правильный XML-документ?

  5. Что такое валидный XML-документ?

  6. Как осуществить переход по узлам DOM-объекта XML документа?

  7. Как проверить валидность документа в PHP и Java?

  8. В чем преимущества XML-схемы по сравнению с DTD?

При подготовке ответов на вопросы можно использовать материалы лекции

Приложение 1

Документация по объекту XMLHttpRequest

Источник: http://xmlhttprequest.ru/

Соседние файлы в папке Интернет технологии