@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></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
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/reference/std/xml