Spec-Zone.ru › D

std.xml

Предупреждение: Этот модуль считается устаревшим и не соответствует современным стандартам Phobos. Он будет удален из Phobos в версии 2.101.0. Если вам он всё ещё нужен, обратитесь к https://github.com/DigitalMars/undeaD

Классы и функции для создания и разбора XML

Основная архитектура этого модуля заключается в том, что существуют отдельные функции, классы для построения XML-документа с нуля (Tag, Element и Document), а также классы для разбора существующего XML-файла (ElementParser и DocumentParser). Классы разбора могут использоваться для построения документа, но это не их основная задача. Возможности обработки DocumentParser и ElementParser достаточно настраиваемы, чтобы вы могли заставить их выполнять практически всё, что вам нужно.

Пример
Этот пример создаёт дерево DOM (Document Object Model) из XML-файла.
import std.xml;
import std.stdio;
import std.string;
import std.file;

// books.xml is used in various samples throughout the Microsoft XML Core
// Services (MSXML) SDK.
//
// See http://msdn2.microsoft.com/en-us/library/ms762271(VS.85).aspx

void main()
{
    string s = cast(string) std.file.read("books.xml");

    // Check for well-formedness
    check(s);

    // Make a DOM tree
    auto doc = new Document(s);

    // Plain-print it
    writeln(doc);
}
Пример
Этот пример делает почти то же самое, за исключением того, что файл разбирается и собирается вручную. Это требует больше усилий, но используемые методы дают гораздо больше возможностей.
import std.xml;
import std.stdio;
import std.string;

struct Book
{
    string id;
    string author;
    string title;
    string genre;
    string price;
    string pubDate;
    string description;
}

void main()
{
    string s = cast(string) std.file.read("books.xml");

    // Check for well-formedness
    check(s);

    // Take it apart
    Book[] books;

    auto xml = new DocumentParser(s);
    xml.onStartTag["book"] = (ElementParser xml)
    {
        Book book;
        book.id = xml.tag.attr["id"];

        xml.onEndTag["author"]       = (in Element e) { book.author      = e.text(); };
        xml.onEndTag["title"]        = (in Element e) { book.title       = e.text(); };
        xml.onEndTag["genre"]        = (in Element e) { book.genre       = e.text(); };
        xml.onEndTag["price"]        = (in Element e) { book.price       = e.text(); };
        xml.onEndTag["publish-date"] = (in Element e) { book.pubDate     = e.text(); };
        xml.onEndTag["description"]  = (in Element e) { book.description = e.text(); };

        xml.parse();

        books ~= book;
    };
    xml.parse();

    // Put it back together again;
    auto doc = new Document(new Tag("catalog"));
    foreach (book;books)
    {
        auto element = new Element("book");
        element.tag.attr["id"] = book.id;

        element ~= new Element("author",      book.author);
        element ~= new Element("title",       book.title);
        element ~= new Element("genre",       book.genre);
        element ~= new Element("price",       book.price);
        element ~= new Element("publish-date",book.pubDate);
        element ~= new Element("description", book.description);

        doc ~= element;
    }

    // Pretty-print it
    writefln(join(doc.pretty(3),"\n"));
}
Лицензия:
Лицензия Boost 1.0.
Авторы:
Janice Caron
Исходный код
std/xml.d
pure nothrow @nogc @safe bool isChar(dchar c);

Возвращает true, если символ является символом в соответствии со стандартом XML

Стандарты:
XML 1.0
Параметры:
dchar c символ для проверки
pure nothrow @nogc @safe bool isSpace(dchar c);

Возвращает true, если символ является пробелом в соответствии со стандартом XML

В XML пробелами считаются только следующие символы: пробел, табуляция, возврат каретки и перевод строки

Стандарты:
XML 1.0
Параметры:
dchar c символ для проверки
pure nothrow @nogc @safe bool isDigit(dchar c);

Возвращает true, если символ является цифрой в соответствии со стандартом XML

Стандарты:
XML 1.0
Параметры:
dchar c символ для проверки
pure nothrow @nogc @safe bool isLetter(dchar c);

Возвращает true, если символ является буквой в соответствии со стандартом XML

Стандарты:
XML 1.0
Параметры:
dchar c символ для проверки
pure nothrow @nogc @safe bool isIdeographic(dchar c);

Возвращает true, если символ является идеографическим символом в соответствии со стандартом XML

Стандарты:
XML 1.0
Параметры:
dchar c символ для проверки
pure nothrow @nogc @safe bool isBaseChar(dchar c);

Возвращает true, если символ является базовым символом в соответствии со стандартом XML

Стандарты:
XML 1.0
Параметры:
dchar c символ для проверки
pure nothrow @nogc @safe bool isCombiningChar(dchar c);

Возвращает true, если символ является комбинирующим символом в соответствии со стандартом XML

Стандарты:
XML 1.0
Параметры:
dchar c символ для проверки
pure nothrow @nogc @safe bool isExtender(dchar c);

Возвращает true, если символ является расширителем в соответствии со стандартом XML

Стандарты:
XML 1.0
Параметры:
dchar c символ для проверки
S encode(S)(S s);

Кодирует строку, заменяя все символы, требующие экранирования, соответствующими предопределёнными сущностями XML.

encode() экранирует определённые символы (амперсанд, кавычки, апостроф, меньше и больше), а decode() соответственно их деэкранирует. Эти функции предоставляются для удобства. Их не нужно использовать при работе с классами std.xml, так как кодирование и декодирование будут выполняться автоматически.

Если строка не изменена, возвращается исходная строка.

Стандарты:
XML 1.0
Параметры:
S s Строка для кодирования
Возвращает:
Закодированная строка
Пример
writefln(encode("a > b")); // writes "a > b"
enum DecodeMode: int;

Режим для использования при декодировании.

NONE
Не декодировать
LOOSE
Декодировать, но игнорировать ошибки
STRICT
Декодировать и бросать исключение при ошибке

pure @safe string decode(string s, DecodeMode mode = DecodeMode.LOOSE);

Декодирует строку, убирая экранирование всех предопределённых сущностей XML.

encode() экранирует определённые символы (амперсанд, кавычки, апостроф, меньше и больше), а decode() соответственно их деэкранирует. Эти функции предоставляются для удобства. Их не нужно использовать при работе с классами std.xml, так как кодирование и декодирование будут выполняться автоматически.

Эта функция декодирует сущности &, ", ', < и &gt, а также десятичные и шестнадцатеричные сущности, такие как €

Если строка не содержит амперсанд, возвращается исходная строка.

Обратите внимание, что параметр «mode» может принимать значения DecodeMode.NONE (не декодировать), DecodeMode.LOOSE (декодировать, но игнорировать ошибки) или DecodeMode.STRICT (декодировать и бросать исключение DecodeException в случае ошибки).

Стандарты:
XML 1.0
Параметры:
string s Строка для декодирования
DecodeMode mode (необязательно) Режим для использования при декодировании. (По умолчанию LOOSE).
Исключения:
DecodeException если mode == DecodeMode.STRICT и декодирование завершилось неудачно
Возвращает:
Декодированная строка
Пример
writefln(decode("a > b")); // writes "a > b"
class Document: std.xml.Element;

Класс, представляющий XML-документ.

Стандарты:
XML 1.0
string prolog;

Содержит весь текст, который предшествует корневому элементу. По умолчанию <?xml version="1.0"?>

string epilog;

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

this(string s);

Создаёт Document, анализируя XML-текст.

Эта функция создаёт полное дерево DOM (Document Object Model).

Входные данные для этой функции ДОЛЖНЫ быть валидным XML. Это проверяется в контракте DocumentParser.

Параметры:
string s полный XML-текст.
this(const(Tag) tag);

Создаёт Document из тега Tag.

Параметры:
const(Tag) tag стартовый тег документа.
const bool opEquals(scope const Object o);

Сравнивает два документа на равенство

Пример
Document d1,d2;
if (d1 == d2) { }
const scope int opCmp(scope const Object o);

Сравнивает два документа

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

Пример
Document d1,d2;
if (d1 < d2) { }
const scope @trusted size_t toHash();

Возвращает хеш-значение документа

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

const scope @safe string toString();

Возвращает строковое представление документа. (То есть весь XML-документ).

class Element: std.xml.Item;

Класс, представляющий XML-элемент.

Стандарты:
XML 1.0
Тег tag;

Начальный тег элемента

Элемент[] items;

Элементы элемента

Текст[] texts;

Текстовые элементы элемента

CData[] cdatas;

Элементы CData элемента

Комментарий[] comments;

Комментарии элемента

ИнструкцияОбработки[] pis;

Инструкции обработки элемента

Элемент[] elements;

Дочерние элементы элемента

pure @safe this(string name, string interior = null);

Создает элемент Element, задавая имя и строку, используемую в качестве внутреннего текста.

Параметры:
string name имя элемента.
string interior (необязательно) внутренняя строка.
Пример
auto element = new Element("title","Serenity")
    // constructs the element <title>Serenity</title>
pure @safe this(const(Tag) tag_);

Создает элемент Element из тега Tag.

Параметры:
const(Tag) tag_ начальный или пустой тег элемента.
pure @safe void opOpAssign(string op)(Text item)
Constraints: if (op == "~");

Добавляет текстовый элемент в содержимое этого элемента

Параметры:
Text item элемент, который нужно добавить.
Пример
Element element;
element ~= new Text("hello");
pure @safe void opOpAssign(string op)(CData item)
Constraints: if (op == "~");

Добавляет элемент CData в содержимое этого элемента

Параметры:
CData item элемент, который нужно добавить.
Пример
Element element;
element ~= new CData("hello");
pure @safe void opOpAssign(string op)(Comment item)
Constraints: if (op == "~");

Добавляет комментарий в содержимое этого элемента

Параметры:
Комментарий item элемент, который нужно добавить.
Пример
Element element;
element ~= new Comment("hello");
pure @safe void opOpAssign(string op)(ProcessingInstruction item)
Constraints: if (op == "~");

Добавляет инструкцию обработки в содержимое этого элемента

Параметры:
ИнструкцияОбработки item элемент, который нужно добавить.
Пример
Element element;
element ~= new ProcessingInstruction("hello");
pure @safe void opOpAssign(string op)(Element item)
Constraints: if (op == "~");

Добавляет целый элемент в содержимое этого элемента

Параметры:
Элемент item элемент, который нужно добавить.
Пример
Element element;
Element other = new Element("br");
element ~= other;
   // appends element representing <br />
const bool opEquals(scope const Object o);

Сравнивает два элемента Element на равенство

Пример
Element e1,e2;
if (e1 == e2) { }
const @safe int opCmp(scope const Object o);

Сравнивает два элемента Element

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

Пример
Element e1,e2;
if (e1 < e2) { }
const scope @safe size_t toHash();

Возвращает хэш элемента Element

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

const string text(DecodeMode mode = DecodeMode.LOOSE);

Возвращает декодированное внутреннее содержимое элемента.

Предполагается, что элемент содержит только текст. Например, для XML вида "<title>Good &amp; Bad</title>" вернётся "Good & Bad".

Параметры:
DecodeMode mode (необязательно) Режим декодирования. (По умолчанию LOOSE).
Исключения:
DecodeException, если декодирование не удалось
const scope string[] pretty(uint indent = 2);

Возвращает отформатированную строку представления этого элемента

Параметры:
uint indent (необязательно) количество пробелов для отступа элемента. По умолчанию 2.
const scope @safe string toString();

Возвращает строковое представление элемента Element

Пример
auto element = new Element("br");
writefln(element.toString()); // writes "<br />"
Перечисление TagType: int;

Типы тегов.

START
Использоватся для начальных тегов
END
Использоватся для конечных тегов
EMPTY
Использоватся для пустых тегов

Класс Tag;

Класс, представляющий XML-тег.

Стандарты:
XML 1.0 Класс гарантирует
  • что type — корректное значение перечисления TagType
  • что name состоит из корректных символов
  • что каждое имя атрибута состоит из корректных символов
TagType type;

Тип тега

string name;

Имя тега

string[string] attr;

Ассоциативный массив атрибутов

pure @safe this(string name, TagType type = TagType.START);

Создаёт экземпляр Tag с указанным именем и типом

Конструктор не инициализирует атрибуты. Для инициализации атрибутов обратитесь к члену attr.

Параметры:
string name имя тега
TagType type (необязательно) тип тега. Если опущен, по умолчанию TagType.START.
Пример
auto tag = new Tag("img",Tag.EMPTY);
tag.attr["src"] = "http://example.com/example.jpg";
const bool opEquals(scope Object o);

Сравнивает два тега Tag на равенство

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

Пример
Tag tag1,tag2
if (tag1 == tag2) { }
const int opCmp(Object o);

Сравнивает два тега Tag

Пример
Tag tag1,tag2
if (tag1 < tag2) { }
const size_t toHash();

Возвращает хэш тега Tag

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

const @safe string toString();

Возвращает строковое представление тега Tag

Пример
auto tag = new Tag("book",TagType.START);
writefln(tag.toString()); // writes "<book>"
const pure nothrow @nogc @property @safe bool isStart();

Возвращает true, если тег Tag — начальный

Пример
if (tag.isStart) { }
const pure nothrow @nogc @property @safe bool isEnd();

Возвращает true, если тег Tag — конечный

Пример
if (tag.isEnd) { }
const pure nothrow @nogc @property @safe bool isEmpty();

Возвращает true, если тег Tag — пустой

Пример
if (tag.isEmpty) { }
Класс Comment: std.xml.Item;

Класс, представляющий комментарий

pure @safe this(string content);

Конструирует комментарий

Параметры:
string content тело комментария
Исключения:
CommentException, если тело комментария является некорректным (содержит "--" или точно равно "-")
Пример
auto item = new Comment("This is a comment");
   // constructs <!--This is a comment-->
const bool opEquals(scope const Object o);

Сравнивает два комментария на равенство

Пример
Comment item1,item2;
if (item1 == item2) { }
const scope int opCmp(scope const Object o);

Сравнивает два комментария

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

Пример
Comment item1,item2;
if (item1 < item2) { }
const nothrow scope size_t toHash();

Возвращает хэш комментария Comment

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

const pure nothrow scope @safe string toString();

Возвращает строковое представление этого комментария

const pure nothrow @nogc @property scope @safe bool isEmptyXML();

Возвращает false всегда

Класс CData: std.xml.Item;

Класс, представляющий раздел данных символов

pure @safe this(string content);

Создать раздел данных символов

Параметры:
string content тело сегмента данных символов
Исключения:
CDataException, если тело сегмента некорректно (содержит "]]>")
Пример
auto item = new CData("<b>hello</b>");
   // constructs <![CDATA[<b>hello</b>]]>
const bool opEquals(scope const Object o);

Сравнение двух CData на равенство

Пример
CData item1,item2;
if (item1 == item2) { }
const scope int opCmp(scope const Object o);

Сравнение двух CData

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

Пример
CData item1,item2;
if (item1 < item2) { }
const nothrow scope size_t toHash();

Возвращает хеш CData

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

const pure nothrow scope @safe string toString();

Возвращает строковое представление этого раздела CData

const pure nothrow @nogc @property scope @safe bool isEmptyXML();

Всегда возвращает false

class Text: std.xml.Item;

Класс, представляющий раздел текста (также известен как Parsed Character Data)

pure @safe this(string content);

Создать раздел текста (PCData)

Параметры:
string content текст. Эта функция кодирует текст перед вставкой, поэтому можно вставлять любой текст
Пример
auto Text = new CData("a < b");
   // constructs a &lt; b
const bool opEquals(scope const Object o);

Сравнение двух разделов текста на равенство

Пример
Text item1,item2;
if (item1 == item2) { }
const scope int opCmp(scope const Object o);

Сравнение двух разделов текста

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

Пример
Text item1,item2;
if (item1 < item2) { }
const nothrow scope size_t toHash();

Возвращает хеш раздела текста

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

const pure nothrow @nogc scope @safe string toString();

Возвращает строковое представление этого раздела Text

const pure nothrow @nogc @property scope @safe bool isEmptyXML();

Возвращает true, если содержимое является пустой строкой

class XMLInstruction: std.xml.Item;

Класс, представляющий раздел XML инструкции

pure @safe this(string content);

Создать раздел XML инструкции

Параметры:
string content тело сегмента инструкции
Исключения:
XIException, если тело сегмента некорректно (содержит ">")
Пример
auto item = new XMLInstruction("ATTLIST");
   // constructs <!ATTLIST>
const bool opEquals(scope const Object o);

Сравнение двух XML инструкций на равенство

Пример
XMLInstruction item1,item2;
if (item1 == item2) { }
const scope int opCmp(scope const Object o);

Сравнение двух XML инструкций

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

Пример
XMLInstruction item1,item2;
if (item1 < item2) { }
const nothrow scope size_t toHash();

Возвращает хеш XMLInstruction

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

const pure nothrow scope @safe string toString();

Возвращает строковое представление этого XmlInstruction

const pure nothrow @nogc @property scope @safe bool isEmptyXML();

Всегда возвращает false

class ProcessingInstruction: std.xml.Item;

Класс, представляющий раздел инструкции обработки

pure @safe this(string content);

Создать раздел инструкции обработки

Параметры:
string content тело сегмента инструкции
Исключения:
PIException, если тело сегмента некорректно (содержит "?>")
Пример
auto item = new ProcessingInstruction("php");
   // constructs <?php?>
const bool opEquals(scope const Object o);

Сравнение двух инструкций обработки на равенство

Пример
ProcessingInstruction item1,item2;
if (item1 == item2) { }
const scope int opCmp(scope const Object o);

Сравнение двух инструкций обработки

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

Пример
ProcessingInstruction item1,item2;
if (item1 < item2) { }
const nothrow scope size_t toHash();

Возвращает хеш ProcessingInstruction

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

const pure nothrow scope @safe string toString();

Возвращает строковое представление этого ProcessingInstruction

const pure nothrow @nogc @property scope @safe bool isEmptyXML();

Всегда возвращает false

abstract class Item;

Абстрактный базовый класс для элементов XML

abstract const @safe bool opEquals(scope const Object o);

Сравнение с другим элементом того же типа на равенство

abstract const @safe int opCmp(scope const Object o);

Сравнение с другим элементом того же типа

abstract const scope @safe size_t toHash();

Возвращает хеш этого элемента

abstract const scope @safe string toString();

Возвращает строковое представление этого элемента

const scope @safe string[] pretty(uint indent);

Возвращает отформатированное строковое представление этого элемента

Параметры:
uint indent количество пробелов для отступа дочерних элементов
abstract const pure nothrow @nogc @property scope @safe bool isEmptyXML();

Возвращает true, если элемент представляет пустой XML текст

class DocumentParser: std.xml.ElementParser;

Класс для парсинга XML документа.

Это подкласс ElementParser. Большинство полезных функций описаны там.

Стандарты:
XML 1.0
Ошибки:
В настоящее время поддерживаются только UTF документы. Если в прологе есть атрибут кодировки, он игнорируется.
this(string xmlText_);

Создаёт DocumentParser.

Входные данные для этой функции ДОЛЖНЫ быть валидным XML. Это проверяется в контракте функции.

Параметры:
string xmlText_ весь XML документ как текст
class ElementParser;

Класс для разбора XML-элемента.

Стандарты:
XML 1.0 Обратите внимание, что вы не можете создавать экземпляры этого класса напрямую. Вы можете создать DocumentParser (который является подклассом ElementParser), но в противном случае экземпляры ElementParser будут созданы для вас библиотекой и переданы вам через обработчики onStartTag.
const pure nothrow @nogc @property @safe const(Tag) tag();

Тег в начале анализируемого элемента. Вы можете прочитать его, чтобы определить имя тега и его атрибуты.

ParserHandler[string] onStartTag;

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

Пример
// Call this function whenever a <podcast> start tag is encountered
onStartTag["podcast"] = (ElementParser xml)
{
    // Your code here
    //
    // This is a a closure, so code here may reference
    // variables which are outside of this scope
};

// call myEpisodeStartHandler (defined elsewhere) whenever an <episode>
// start tag is encountered
onStartTag["episode"] = &myEpisodeStartHandler;

// call delegate dg for all other start tags
onStartTag[null] = dg;
Эта библиотека предоставит вашей функции новый экземпляр ElementHandler, который может быть использован для разбора внутри элемента, начальный тег которого был только что найден, или для идентификации атрибутов тега элемента и т. д. Обратите внимание, что ваша функция будет вызываться как для начальных тегов, так и для пустых тегов. То есть, мы не делаем различия между <br></br> и <br/>.
ElementHandler[string] onEndTag;

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

Пример
// Call this function whenever a </podcast> end tag is encountered
onEndTag["podcast"] = (in Element e)
{
    // Your code here
    //
    // This is a a closure, so code here may reference
    // variables which are outside of this scope
};

// call myEpisodeEndHandler (defined elsewhere) whenever an </episode>
// end tag is encountered
onEndTag["episode"] = &myEpisodeEndHandler;

// call delegate dg for all other end tags
onEndTag[null] = dg;
Обратите внимание, что ваша функция будет вызываться как для начальных тегов, так и для пустых тегов. То есть, мы не делаем различия между <br></br> и <br/>.
pure nothrow @nogc @property @safe void onText(Handler handler);

Регистрирует обработчик, который будет вызываться всякий раз, когда встречается текст.

Пример
// Call this function whenever text is encountered
onText = (string s)
{
    // Your code here

    // The passed parameter s will have been decoded by the time you see
    // it, and so may contain any character.
    //
    // This is a a closure, so code here may reference
    // variables which are outside of this scope
};
pure nothrow @nogc @safe void onTextRaw(Handler handler);

Регистрирует альтернативный обработчик, который будет вызываться всякий раз, когда встречается текст. Это отличается от onText тем, что onText будет декодировать текст, в то время как onTextRaw не будет. Это позволяет вам принимать проектные решения, поскольку onText будет более точным, но медленнее, а onTextRaw будет быстрее, но менее точным. Конечно, вы все еще можете вызвать decode() в своем обработчике, если хотите, но, вероятно, вы захотите использовать onTextRaw только в тех случаях, когда вы знаете, что декодирование не требуется.

Пример
// Call this function whenever text is encountered
onText = (string s)
{
    // Your code here

    // The passed parameter s will NOT have been decoded.
    //
    // This is a a closure, so code here may reference
    // variables which are outside of this scope
};
pure nothrow @nogc @property @safe void onCData(Handler handler);

Регистрирует обработчик, который будет вызываться всякий раз, когда встречается сегмент данных символов.

Пример
// Call this function whenever a CData section is encountered
onCData = (string s)
{
    // Your code here

    // The passed parameter s does not include the opening <![CDATA[
    // nor closing ]]>
    //
    // This is a a closure, so code here may reference
    // variables which are outside of this scope
};
pure nothrow @nogc @property @safe void onComment(Handler handler);

Регистрирует обработчик, который будет вызываться всякий раз, когда встречается комментарий.

Пример
// Call this function whenever a comment is encountered
onComment = (string s)
{
    // Your code here

    // The passed parameter s does not include the opening <!-- nor
    // closing -->
    //
    // This is a a closure, so code here may reference
    // variables which are outside of this scope
};
pure nothrow @nogc @property @safe void onPI(Handler handler);

Регистрирует обработчик, который будет вызываться всякий раз, когда встречается инструкция обработки.

Пример
// Call this function whenever a processing instruction is encountered
onPI = (string s)
{
    // Your code here

    // The passed parameter s does not include the opening <? nor
    // closing ?>
    //
    // This is a a closure, so code here may reference
    // variables which are outside of this scope
};
pure nothrow @nogc @property @safe void onXI(Handler handler);

Регистрирует обработчик, который будет вызываться всякий раз, когда встречается инструкция XML.

Пример
// Call this function whenever an XML instruction is encountered
// (Note: XML instructions may only occur preceding the root tag of a
// document).
onPI = (string s)
{
    // Your code here

    // The passed parameter s does not include the opening <! nor
    // closing >
    //
    // This is a a closure, so code here may reference
    // variables which are outside of this scope
};
void parse();

Разбирает XML-элемент.

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

Выбрасывает:
различные виды XMLException
const pure nothrow @nogc @safe string toString();

Возвращает ту часть элемента, которая уже была обработана

pure @safe void check(string s);

Проверяет весь XML-документ на корректность.

Параметры:
строка s документ для проверки, переданный в виде строки
Выбрасывает:
CheckException, если документ не корректен. Метод toString() CheckException вернёт полную иерархию сбоя разбора (XML-аналог трассировки стека), указывая строку и столбец каждого сбоя на каждом уровне.
class XMLException: object.Exception;

Базовый класс исключений, выбрасываемых этим модулем

class CommentException: std.xml.XMLException;

Выбрасывается во время создания Comment

class CDataException: std.xml.XMLException;

Выбрасывается во время создания CData

class XIException: std.xml.XMLException;

Выбрасывается во время создания XMLInstruction

class PIException: std.xml.XMLException;

Выбрасывается во время создания ProcessingInstruction

class TextException: std.xml.XMLException;

Выбрасывается во время создания Text

class DecodeException: std.xml.XMLException;

Выбрасывается во время decode()

class InvalidTypeException: std.xml.XMLException;

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

class TagException: std.xml.XMLException;

Выбрасывается при разборе тегов

class CheckException: std.xml.XMLException;

Выбрасывается во время check()

CheckException err;

Родитель в иерархии

string msg;

Имя правила разбора, которое не удалось обработать, или конкретное сообщение об ошибке

size_t line;

Номер строки, на котором произошёл сбой разбора

size_t column;

Номер столбца, на котором произошёл сбой разбора

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_xml.html

Spec-Zone.ru

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