XMLParser

Наследует: RefCounted < Object

Предоставляет низкоуровневый интерфейс для создания парсеров XML-файлов.

Описание

Предоставляет низкоуровневый интерфейс для создания парсеров для файлов XML. Этот класс может служить основой для создания пользовательских парсеров XML.

Для парсинга XML необходимо открыть файл с помощью метода open() или буфер с помощью метода open_buffer(). Затем необходимо вызвать метод read() для парсинга следующих узлов. Большинство методов учитывают текущий парсерируемый узел.

Вот пример использования XMLParser для парсинга файла SVG (который основан на XML), выводя каждый элемент и его атрибуты в виде словаря:

var parser = XMLParser.new()
parser.open("path/to/file.svg")
while parser.read() != ERR_FILE_EOF:
    if parser.get_node_type() == XMLParser.NODE_ELEMENT:
        var node_name = parser.get_node_name()
        var attributes_dict = {}
        for idx in range(parser.get_attribute_count()):
            attributes_dict[parser.get_attribute_name(idx)] = parser.get_attribute_value(idx)
        print("Элемент ", node_name, " имеет следующие атрибуты: ", attributes_dict)

Методы

int

get_attribute_count() const

String

get_attribute_name(idx: int) const

String

get_attribute_value(idx: int) const

int

get_current_line() const

String

get_named_attribute_value(name: String) const

String

get_named_attribute_value_safe(name: String) const

String

get_node_data() const

String

get_node_name() const

int

get_node_offset() const

NodeType

get_node_type()

bool

has_attribute(name: String) const

bool

is_empty() const

Error

open(file: String)

Error

open_buffer(buffer: PackedByteArray)

Error

read()

Error

seek(position: int)

void

skip_section()


Перечисления

enum NodeType: 🔗

NodeType NODE_NONE = 0

Нет узла (файл или буфер не открыты).

NodeType NODE_ELEMENT = 1

Тип узла элемента, также известный как тег, например, <title>.

NodeType NODE_ELEMENT_END = 2

Конец типа узла элемента, например </title>.

NodeType NODE_TEXT = 3

Тип текстового узла, т.е. текст, который не находится внутри элемента. Сюда входят пробелы.

NodeType NODE_COMMENT = 4

Тип узла комментария, например, <!--A comment-->.

NodeType NODE_CDATA = 5

Тип узла для разделов CDATA (символьные данные), например, <![CDATA[CDATA section]]>.

NodeType NODE_UNKNOWN = 6

Неизвестный тип узла.


Описания метода

int get_attribute_count() const 🔗

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

Примечание: Если этот метод используется, когда текущий анализируемый узел не является NODE_ELEMENT или NODE_ELEMENT_END, это количество не будет обновлено и по-прежнему будет отражать последний элемент.


String get_attribute_name(idx: int) const 🔗

Возвращает имя атрибута текущего анализируемого элемента, заданного индексом idx.


String get_attribute_value(idx: int) const 🔗

Возвращает значение атрибута текущего анализируемого элемента, указанного индексом idx.


int get_current_line() const 🔗

Возвращает текущую строку в проанализированном файле, начиная с 0.


String get_named_attribute_value(name: String) const 🔗

Возвращает значение атрибута текущего анализируемого элемента, указанного его name. Этот метод вызовет ошибку, если элемент не имеет такого атрибута.


String get_named_attribute_value_safe(name: String) const 🔗

Возвращает значение атрибута текущего анализируемого элемента, указанного его name. Этот метод вернет пустую строку, если элемент не имеет такого атрибута.


String get_node_data() const 🔗

Возвращает содержимое текстового узла. Этот метод вызовет ошибку, если текущий проанализированный узел имеет любой другой тип.


String get_node_name() const 🔗

Возвращает имя узла. Этот метод вызовет ошибку, если текущий анализируемый узел является текстовым узлом.

Примечание: Содержимое узла NODE_CDATA и строка комментария узла NODE_COMMENT также считаются именами.


int get_node_offset() const 🔗

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


NodeType get_node_type() 🔗

Возвращает тип текущего узла. Сравните с константами NodeType.


bool has_attribute(name: String) const 🔗

Возвращает true, если текущий анализируемый элемент имеет атрибут с name.


bool is_empty() const 🔗

Возвращает true, если текущий обработанный элемент пуст, например <element />.


Error open(file: String) 🔗

Открывает XML file для разбора. Этот метод возвращает код ошибки.


Error open_buffer(buffer: PackedByteArray) 🔗

Открывает XML raw buffer для разбора. Этот метод возвращает код ошибки.


Error read() 🔗

Анализирует следующий узел в файле. Этот метод возвращает код ошибки.


Error seek(position: int) 🔗

Перемещает курсор буфера на определенное смещение (от начала) и считывает следующий узел там. Этот метод возвращает код ошибки.


void skip_section() 🔗

Пропускает текущий раздел. Если текущий анализируемый узел содержит больше внутренних узлов, они будут проигнорированы, а курсор перейдет к закрытию текущего элемента.