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)
var parser = new XmlParser();
parser.Open("path/to/file.svg");
while (parser.Read() != Error.FileEof)
{
if (parser.GetNodeType() == XmlParser.NodeType.Element)
{
var nodeName = parser.GetNodeName();
var attributesDict = new Godot.Collections.Dictionary();
for (int idx = 0; idx < parser.GetAttributeCount(); idx++)
{
attributesDict[parser.GetAttributeName(idx)] = parser.GetAttributeValue(idx);
}
GD.Print($"Элемент {nodeName} имеет следующие атрибуты: {attributesDict}");
}
}
Методы
get_attribute_count() const |
|
get_attribute_name(idx: int) const |
|
get_attribute_value(idx: int) const |
|
get_current_line() const |
|
get_named_attribute_value(name: String) const |
|
get_named_attribute_value_safe(name: String) const |
|
get_node_data() const |
|
get_node_name() const |
|
get_node_offset() const |
|
has_attribute(name: String) const |
|
is_empty() const |
|
open_buffer(buffer: PackedByteArray) |
|
read() |
|
void |
Перечисления
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 также считаются именами.
Возвращает смещение байта текущего анализируемого узла с начала файла или буфера. Обычно это эквивалентно количеству символов до позиции чтения.
Возвращает тип текущего узла. Сравните с константами NodeType.
bool has_attribute(name: String) const 🔗
Возвращает true, если текущий анализируемый элемент имеет атрибут с name.
Возвращает true, если текущий обработанный элемент пуст, например <element />.
Открывает XML file для разбора. Этот метод возвращает код ошибки.
Error open_buffer(buffer: PackedByteArray) 🔗
Открывает XML raw buffer для разбора. Этот метод возвращает код ошибки.
Анализирует следующий узел в файле. Этот метод возвращает код ошибки.
Перемещает курсор буфера на определенное смещение (от начала) и считывает следующий узел там. Этот метод возвращает код ошибки.
void skip_section() 🔗
Пропускает текущий раздел. Если текущий анализируемый узел содержит больше внутренних узлов, они будут проигнорированы, а курсор перейдет к закрытию текущего элемента.