Jump to content

Java API для обработки XML

(Перенаправлено с JAXP )

В вычислениях Java API для обработки XML ( JAXP ) ( / ˈ æ k s p / JAKS -pee ), один из Java XML интерфейсов прикладного программирования (API), обеспечивает возможность проверки и анализа XML- документов. Он имеет три основных интерфейса синтаксического анализа:

В дополнение к интерфейсам синтаксического анализа API предоставляет интерфейс XSLT для предоставления данных и структурных преобразований в XML-документе.

JAXP был разработан в рамках процесса сообщества Java как JSR 5 (JAXP 1.0), JSR 63 (JAXP 1.1 и 1.2) и JSR 206 (JAXP 1.3).

SE Java -версия Версия JAXP в комплекте
1.4 1.1
1.5 1.3
1.6 1.4
1.7.0 1.4.5
1.7.40 1.5
1.8 1.6 [ 1 ]

Версия JAXP 1.4.4 была выпущена 3 сентября 2010 г. Срок службы JAXP 1.3 был объявлен 12 февраля 2008 г.

DOM-интерфейс

[ редактировать ]

Интерфейс DOM анализирует весь XML-документ и создает полное представление документа в памяти, используя классы и моделируя концепции, найденные в базовой спецификации объектной модели документа уровня 2.

Парсер DOM называется DocumentBuilder, поскольку он создает в памяти Document представительство. javax.xml.parsers.DocumentBuilder создается javax.xml.parsers.DocumentBuilderFactory. [ 2 ] DocumentBuilder создает org.w3c.dom.Document экземпляр — древовидная структура, содержащая узлы в XML-документе. Каждый узел дерева в структуре реализует org.w3c.dom.Node интерфейс. Среди множества различных типов узлов дерева, каждый из которых представляет тип данных, содержащихся в XML-документе, наиболее важными являются:

  • узлы элементов, которые могут иметь атрибуты
  • текстовые узлы, представляющие текст, найденный между начальным и конечным тегами элемента документа.

SAX-интерфейс

[ редактировать ]

The javax.xml.parsers.SAXParserFactory создает парсер SAX, называемый SAXParser. В отличие от анализатора DOM, анализатор SAX не создает представление XML-документа в памяти и поэтому работает быстрее и использует меньше памяти. Вместо этого анализатор SAX информирует клиентов о структуре XML-документа, вызывая обратные вызовы, то есть вызывая методы в DefaultHandler экземпляр, предоставленный синтаксическому анализатору. Этот способ доступа к документу называется потоковой передачей XML .

The DefaultHandler класс реализует ContentHandler, ErrorHandler, DTDHandlerи EntityResolver интерфейсы. Большинству клиентов будут интересны методы, определенные в ContentHandler интерфейс, который вызывается, когда анализатор SAX обнаруживает соответствующие элементы в документе XML. Наиболее важными методами в этом интерфейсе являются:

  • startDocument() и endDocument() методы, которые вызываются в начале и конце XML-документа.
  • startElement() и endElement() методы, которые вызываются в начале и конце элемента документа.
  • characters() метод, который вызывается с текстовыми данными, содержащимися между начальным и конечным тегами элемента XML-документа.

Клиенты предоставляют подкласс DefaultHandler который переопределяет эти методы и обрабатывает данные. Это может включать сохранение данных в базе данных или запись их в поток.

Во время анализа синтаксическому анализатору может потребоваться доступ к внешним документам. Можно хранить локальный кэш для часто используемых документов с помощью XML-каталога .

Это было представлено в Java 1.3 в мае 2000 года. [ 3 ]

интерфейс StAX

[ редактировать ]

StAX был разработан как нечто среднее между интерфейсами DOM и SAX. В своей метафоре программная точка входа — это курсор, который представляет точку внутри документа. Приложение перемещает курсор вперед — «подтягивая» информацию из парсера так, как ему нужно. Это отличается от API, основанного на событиях, такого как SAX, который «пересылает» данные в приложение, требуя от приложения поддерживать состояние между событиями по мере необходимости, чтобы отслеживать местоположение в документе.

XSLT-интерфейс

[ редактировать ]

Язык для стилей XML таблиц . данных преобразований , или XSLT , позволяет преобразовывать XML-документ в другие формы JAXP предоставляет интерфейсы в пакете javax.xml.transform разрешение приложениям вызывать преобразование XSLT. Этот интерфейс первоначально назывался TrAX (API преобразования для XML) и был разработан в результате неофициального сотрудничества разработчиков ряда процессоров Java XSLT.

Основные особенности интерфейса:

  • фабричный класс, позволяющий приложению динамически выбирать, какой процессор XSLT оно желает использовать ( TransformerFactory, TransformerFactory.newInstance(), TransformerFactory.newInstance(String factoryClassName, ClassLoader classLoader).
  • методы фабричного класса для создания Templates объект, представляющий скомпилированную форму таблицы стилей. Это поточно-ориентированный объект, который можно использовать повторно, последовательно или параллельно, для применения одной и той же таблицы стилей к нескольким исходным документам (или к одному и тому же исходному документу с разными параметрами) ( TransformerFactory.newTemplates(Source source)), также TransformerFactory.newTransformer(Source source), TransformerFactory.newTransformer()), метод на Templates объект для создания javax.xml.transform.Transformer, представляющий исполняемую форму таблицы стилей ( Templates.newTransformer()) Его нельзя использовать совместно между потоками, хотя его можно повторно использовать последовательно. Transformer предоставляет методы для установки параметров таблицы стилей и параметров сериализации (например, должен ли вывод иметь отступ), а также метод для фактического запуска преобразования. ( TransformerFactory.transformer(Source xmlSource, Result outputTarget)).

Два абстрактных интерфейса Source и Result определены для представления входных и выходных данных преобразования. Это несколько нетрадиционное использование интерфейсов Java, поскольку не ожидается, что процессор примет какой-либо класс, реализующий интерфейс — каждый процессор может выбирать, какие виды Source или Result он готов справиться. На практике все процессоры JAXP поддерживают несколько стандартных типов Source ( DOMSource, SAXSource StreamSource) и несколько стандартных видов Результата ( DOMResult, SAXResult StreamResult) и, возможно, другие собственные реализации.

Самый примитивный, но полный пример запуска XSLT-преобразования может выглядеть так:

/* file src/examples/xslt/XsltDemo.java */
package examples.xslt;

import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XsltDemo {
    public static void main(String[] args) throws TransformerFactoryConfigurationError, TransformerException {
        //language=xslt
        String xsltResource =
                """
                <?xml version='1.0' encoding='UTF-8'?>
                <xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
                   <xsl:output method='xml' indent='no'/>
                   <xsl:template match='/'>
                      <reRoot><reNode><xsl:value-of select='/root/node/@val' /> world</reNode></reRoot>
                   </xsl:template>
                </xsl:stylesheet>
                """;
        //language=XML
        String xmlSourceResource =
                """
                <?xml version='1.0' encoding='UTF-8'?>
                <root><node val='hello'/></root>
                """;

        StringWriter xmlResultResource = new StringWriter();

        Transformer xmlTransformer = TransformerFactory.newInstance().newTransformer(
                new StreamSource(new StringReader(xsltResource))
        );

        xmlTransformer.transform(
                new StreamSource(new StringReader(xmlSourceResource)), new StreamResult(xmlResultResource)
        );

        System.out.println(xmlResultResource.getBuffer().toString());
    }
}

Он применяет следующее жестко запрограммированное преобразование XSLT:

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
	<xsl:output method='xml' indent='no'/>
	<xsl:template match='/'>
		<reRoot><reNode><xsl:value-of select='/root/node/@val' /> world</reNode></reRoot>
	</xsl:template>
</xsl:stylesheet>

К следующему жестко запрограммированному XML-документу:

<?xml version='1.0' encoding='UTF-8'?>
<root><node val='hello'/></root>

Результатом выполнения будет

<?xml version="1.0" encoding="UTF-8"?><reRoot><reNode>hello world</reNode></reRoot>
  1. ^ «Программа Java Community Process (SM) — JSRS: запросы спецификаций Java — подробности JSR# 206» .
  2. ^ Хорстманн 2022 , §3.3 Анализ XML-документа.
  3. ^ Сравните индекс API Java 1.2.1 с индексом 1.3 . Запрос спецификации Java (JSR) 5, Спецификация синтаксического анализа XML , был завершен 21 марта 2000 года .
  • Хорстманн, Кей (15 апреля 2022 г.). CoreJava . Oracle Press Java. ISBN  0-13-787107-4 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4f3094430b0675d05e3e306ffbd0e9bf__1720719900
URL1:https://arc.ask3.ru/arc/aa/4f/bf/4f3094430b0675d05e3e306ffbd0e9bf.html
Заголовок, (Title) документа по адресу, URL1:
Java API for XML Processing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)