Files
godot-docs-l10n/classes/ru/class_xmlparser.rst

395 lines
21 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:github_url: hide
.. _class_XMLParser:
XMLParser
=========
**Наследует:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
Предоставляет низкоуровневый интерфейс для создания парсеров XML-файлов.
.. rst-class:: classref-introduction-group
Описание
----------------
Предоставляет низкоуровневый интерфейс для создания парсеров для файлов `XML <https://en.wikipedia.org/wiki/XML>`__. Этот класс может служить основой для создания пользовательских парсеров XML.
Для парсинга XML необходимо открыть файл с помощью метода :ref:`open()<class_XMLParser_method_open>` или буфер с помощью метода :ref:`open_buffer()<class_XMLParser_method_open_buffer>`. Затем необходимо вызвать метод :ref:`read()<class_XMLParser_method_read>` для парсинга следующих узлов. Большинство методов учитывают текущий парсерируемый узел.
Вот пример использования **XMLParser** для парсинга файла SVG (который основан на XML), выводя каждый элемент и его атрибуты в виде словаря:
.. tabs::
.. code-tab:: gdscript
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)
.. code-tab:: csharp
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}");
}
}
.. rst-class:: classref-reftable-group
Методы
------------
.. table::
:widths: auto
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`get_attribute_count<class_XMLParser_method_get_attribute_count>`\ (\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_attribute_name<class_XMLParser_method_get_attribute_name>`\ (\ idx\: :ref:`int<class_int>`\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_attribute_value<class_XMLParser_method_get_attribute_value>`\ (\ idx\: :ref:`int<class_int>`\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`get_current_line<class_XMLParser_method_get_current_line>`\ (\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_named_attribute_value<class_XMLParser_method_get_named_attribute_value>`\ (\ name\: :ref:`String<class_String>`\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_named_attribute_value_safe<class_XMLParser_method_get_named_attribute_value_safe>`\ (\ name\: :ref:`String<class_String>`\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_node_data<class_XMLParser_method_get_node_data>`\ (\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_node_name<class_XMLParser_method_get_node_name>`\ (\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`get_node_offset<class_XMLParser_method_get_node_offset>`\ (\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`NodeType<enum_XMLParser_NodeType>` | :ref:`get_node_type<class_XMLParser_method_get_node_type>`\ (\ ) |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`has_attribute<class_XMLParser_method_has_attribute>`\ (\ name\: :ref:`String<class_String>`\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_empty<class_XMLParser_method_is_empty>`\ (\ ) |const| |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`open<class_XMLParser_method_open>`\ (\ file\: :ref:`String<class_String>`\ ) |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`open_buffer<class_XMLParser_method_open_buffer>`\ (\ buffer\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`read<class_XMLParser_method_read>`\ (\ ) |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`seek<class_XMLParser_method_seek>`\ (\ position\: :ref:`int<class_int>`\ ) |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`skip_section<class_XMLParser_method_skip_section>`\ (\ ) |
+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Перечисления
------------------------
.. _enum_XMLParser_NodeType:
.. rst-class:: classref-enumeration
enum **NodeType**: :ref:`🔗<enum_XMLParser_NodeType>`
.. _class_XMLParser_constant_NODE_NONE:
.. rst-class:: classref-enumeration-constant
:ref:`NodeType<enum_XMLParser_NodeType>` **NODE_NONE** = ``0``
Нет узла (файл или буфер не открыты).
.. _class_XMLParser_constant_NODE_ELEMENT:
.. rst-class:: classref-enumeration-constant
:ref:`NodeType<enum_XMLParser_NodeType>` **NODE_ELEMENT** = ``1``
Тип узла элемента, также известный как тег, например, ``<title>``.
.. _class_XMLParser_constant_NODE_ELEMENT_END:
.. rst-class:: classref-enumeration-constant
:ref:`NodeType<enum_XMLParser_NodeType>` **NODE_ELEMENT_END** = ``2``
Конец типа узла элемента, например ``</title>``.
.. _class_XMLParser_constant_NODE_TEXT:
.. rst-class:: classref-enumeration-constant
:ref:`NodeType<enum_XMLParser_NodeType>` **NODE_TEXT** = ``3``
Тип текстового узла, т.е. текст, который не находится внутри элемента. Сюда входят пробелы.
.. _class_XMLParser_constant_NODE_COMMENT:
.. rst-class:: classref-enumeration-constant
:ref:`NodeType<enum_XMLParser_NodeType>` **NODE_COMMENT** = ``4``
Тип узла комментария, например, ``<!--A comment-->``.
.. _class_XMLParser_constant_NODE_CDATA:
.. rst-class:: classref-enumeration-constant
:ref:`NodeType<enum_XMLParser_NodeType>` **NODE_CDATA** = ``5``
Тип узла для разделов CDATA (символьные данные), например, ``<![CDATA[CDATA section]]>``.
.. _class_XMLParser_constant_NODE_UNKNOWN:
.. rst-class:: classref-enumeration-constant
:ref:`NodeType<enum_XMLParser_NodeType>` **NODE_UNKNOWN** = ``6``
Неизвестный тип узла.
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Описания метода
------------------------------
.. _class_XMLParser_method_get_attribute_count:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_attribute_count**\ (\ ) |const| :ref:`🔗<class_XMLParser_method_get_attribute_count>`
Возвращает количество атрибутов в текущем анализируемом элементе.
\ **Примечание:** Если этот метод используется, когда текущий анализируемый узел не является :ref:`NODE_ELEMENT<class_XMLParser_constant_NODE_ELEMENT>` или :ref:`NODE_ELEMENT_END<class_XMLParser_constant_NODE_ELEMENT_END>`, это количество не будет обновлено и по-прежнему будет отражать последний элемент.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_get_attribute_name:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_attribute_name**\ (\ idx\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_XMLParser_method_get_attribute_name>`
Возвращает имя атрибута текущего анализируемого элемента, заданного индексом ``idx``.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_get_attribute_value:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_attribute_value**\ (\ idx\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_XMLParser_method_get_attribute_value>`
Возвращает значение атрибута текущего анализируемого элемента, указанного индексом ``idx``.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_get_current_line:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_current_line**\ (\ ) |const| :ref:`🔗<class_XMLParser_method_get_current_line>`
Возвращает текущую строку в проанализированном файле, начиная с 0.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_get_named_attribute_value:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_named_attribute_value**\ (\ name\: :ref:`String<class_String>`\ ) |const| :ref:`🔗<class_XMLParser_method_get_named_attribute_value>`
Возвращает значение атрибута текущего анализируемого элемента, указанного его ``name``. Этот метод вызовет ошибку, если элемент не имеет такого атрибута.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_get_named_attribute_value_safe:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_named_attribute_value_safe**\ (\ name\: :ref:`String<class_String>`\ ) |const| :ref:`🔗<class_XMLParser_method_get_named_attribute_value_safe>`
Возвращает значение атрибута текущего анализируемого элемента, указанного его ``name``. Этот метод вернет пустую строку, если элемент не имеет такого атрибута.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_get_node_data:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_node_data**\ (\ ) |const| :ref:`🔗<class_XMLParser_method_get_node_data>`
Возвращает содержимое текстового узла. Этот метод вызовет ошибку, если текущий проанализированный узел имеет любой другой тип.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_get_node_name:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_node_name**\ (\ ) |const| :ref:`🔗<class_XMLParser_method_get_node_name>`
Возвращает имя узла. Этот метод вызовет ошибку, если текущий анализируемый узел является текстовым узлом.
\ **Примечание:** Содержимое узла :ref:`NODE_CDATA<class_XMLParser_constant_NODE_CDATA>` и строка комментария узла :ref:`NODE_COMMENT<class_XMLParser_constant_NODE_COMMENT>` также считаются именами.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_get_node_offset:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_node_offset**\ (\ ) |const| :ref:`🔗<class_XMLParser_method_get_node_offset>`
Возвращает смещение байта текущего анализируемого узла с начала файла или буфера. Обычно это эквивалентно количеству символов до позиции чтения.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_get_node_type:
.. rst-class:: classref-method
:ref:`NodeType<enum_XMLParser_NodeType>` **get_node_type**\ (\ ) :ref:`🔗<class_XMLParser_method_get_node_type>`
Возвращает тип текущего узла. Сравните с константами :ref:`NodeType<enum_XMLParser_NodeType>`.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_has_attribute:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **has_attribute**\ (\ name\: :ref:`String<class_String>`\ ) |const| :ref:`🔗<class_XMLParser_method_has_attribute>`
Возвращает ``true``, если текущий анализируемый элемент имеет атрибут с ``name``.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_is_empty:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_empty**\ (\ ) |const| :ref:`🔗<class_XMLParser_method_is_empty>`
Возвращает ``true``, если текущий обработанный элемент пуст, например ``<element />``.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_open:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **open**\ (\ file\: :ref:`String<class_String>`\ ) :ref:`🔗<class_XMLParser_method_open>`
Открывает XML ``file`` для разбора. Этот метод возвращает код ошибки.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_open_buffer:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **open_buffer**\ (\ buffer\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) :ref:`🔗<class_XMLParser_method_open_buffer>`
Открывает XML raw ``buffer`` для разбора. Этот метод возвращает код ошибки.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_read:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **read**\ (\ ) :ref:`🔗<class_XMLParser_method_read>`
Анализирует следующий узел в файле. Этот метод возвращает код ошибки.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_seek:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **seek**\ (\ position\: :ref:`int<class_int>`\ ) :ref:`🔗<class_XMLParser_method_seek>`
Перемещает курсор буфера на определенное смещение (от начала) и считывает следующий узел там. Этот метод возвращает код ошибки.
.. rst-class:: classref-item-separator
----
.. _class_XMLParser_method_skip_section:
.. rst-class:: classref-method
|void| **skip_section**\ (\ ) :ref:`🔗<class_XMLParser_method_skip_section>`
Пропускает текущий раздел. Если текущий анализируемый узел содержит больше внутренних узлов, они будут проигнорированы, а курсор перейдет к закрытию текущего элемента.
.. |virtual| replace:: :abbr:`virtual (Этот метод обычно должен быть переопределен пользователем, чтобы иметь какой-либо эффект.)`
.. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)`
.. |const| replace:: :abbr:`const (Этот метод не имеет побочных эффектов. Он не изменяет ни одну из переменных-членов экземпляра.)`
.. |vararg| replace:: :abbr:`vararg (Этот метод принимает любое количество аргументов после описанных здесь.)`
.. |constructor| replace:: :abbr:`constructor (Этот метод используется для создания типа.)`
.. |static| replace:: :abbr:`static (Этот метод не нуждается в вызове экземпляра, поэтому его можно вызвать напрямую, используя имя класса.)`
.. |operator| replace:: :abbr:`operator (Этот метод описывает допустимый оператор для использования с этим типом в качестве левого операнда.)`
.. |bitfield| replace:: :abbr:`BitField (Это значение является целым числом, составленным как битовая маска следующих флагов.)`
.. |void| replace:: :abbr:`void (Нет возвращаемого значения.)`