Spec-Zone.ru › Deno 2

@std/xml

Обзор

Разбор и сериализация XML для Deno.

Этот модуль реализует непроверяющий валидность парсер для XML 1.0 (пятое издание), а также опциональную поддержку XML 1.1 (второе издание) с помощью параметра разбора xmlVersion.

API для разбора

Для разных сценариев использования доступны три API для разбора:

API Сценарий использования Результат
parse Разбор полной XML-строки Дерево документа
parseXmlStream Потоковая обработка с максимальной пропускной способностью Прямые обратные вызовы
parseXmlRecords Потоковая обработка записей, собираемых в обратных вызовах AsyncGenerator<T>

Краткие примеры

Разбор в стиле DOM

import { parse } from "@std/xml";
import { assertEquals } from "@std/assert";

const doc = parse("<root><item>Hello</item></root>");
assertEquals(doc.root.name.local, "root");

Высокопроизводительная потоковая обработка с обратными вызовами

Для максимальной пропускной способности при обработке больших файлов:

import { parseXmlStream } from "@std/xml";

const response = await fetch("https://example.com/feed.xml");
const textStream = response.body!.pipeThrough(new TextDecoderStream());

let itemCount = 0;
await parseXmlStream(textStream, {
  onStartElement(name) {
    if (name === "item") itemCount++;
  },
});
console.log(`Found ${itemCount} items`);

Потоковая обработка байтовых потоков

Для удобной работы с ответами fetch:

import { parseXmlStreamFromBytes } from "@std/xml";

const response = await fetch("https://example.com/feed.xml");

await parseXmlStreamFromBytes(response.body!, {
  onStartElement(name) {
    console.log(`Element: ${name}`);
  },
});

Режим XML 1.1

Передайте xmlVersion: "1.1", чтобы включить правила разбора XML 1.1. Этот параметр не зависит от объявления <?xml version="..."?> в документе.

import { parse } from "@std/xml";
import { assertEquals, assertThrows } from "@std/assert";

// Accepted in XML 1.1, rejected in XML 1.0:
const xml = "<root>&#x1;</root>";
const doc = parse(xml, { xmlVersion: "1.1" });
assertEquals(doc.root.name.local, "root");
assertThrows(() => parse(xml));

Обработка DOCTYPE

Объявления <!DOCTYPE ...> по умолчанию отклоняются, чтобы избежать обработки потенциально вредоносного содержимого DTD. Передайте disallowDoctype: false, чтобы разрешить их в доверенных входных данных (например, в устаревших XHTML- или RSS-каналах). Содержимое DTD по-прежнему игнорируется — раскрываются только пять предопределённых сущностей (lt, gt, amp, apos, quot).

Отслеживание позиции

Оба парсера поддерживают необязательное отслеживание позиции (строка, столбец, смещение) для отладки и сообщений об ошибках:

  • DOM-парсер (parse): Отслеживание позиции включено по умолчанию для предоставления подробных сообщений об ошибках. Отключите его с помощью { trackPosition: false }, чтобы повысить производительность при разборе доверенного XML.

  • Потоковый парсер (parseXmlStream): Отслеживание позиции отключено по умолчанию для оптимальной производительности потоковой обработки. Включите его с помощью { trackPosition: true }, если нужна информация о позиции.

Добавление в проект

›_
deno add jsr:@std/xml

Посмотреть все символы в @std/xml на

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/reference/std/xml

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API