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, так как кодирование и декодирование будут выполняться автоматически.
Эта функция декодирует сущности &, ", ', < и >, а также десятичные и шестнадцатеричные сущности, такие как €
Если строка не содержит амперсанд, возвращается исходная строка.
Обратите внимание, что параметр «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 & 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 < 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