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("The ", node_name, " element has the following attributes: ", attributes_dict)

方法


枚举

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评论-->

NodeType NODE_CDATA = 5

CDATA(字符数据)部分的节点类型,例如<![CDATA[CDATA section]]>

NodeType NODE_UNKNOWN = 6

未知节点类型。


方法说明

int get_attribute_count() const 🔗

返回当前解析元素中的属性数。

注意:如果在当前解析的节点不是NODE_ELEMENTNODE_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 🔗

如果当前解析的元素具有带有name的属性,则返回true


bool is_empty() const 🔗

如果当前解析的元素为空,则返回true,例如<元素/>


Error open(file: String) 🔗

打开用于解析的XMLfile。此方法返回错误代码。


Error open_buffer(buffer: PackedByteArray) 🔗

打开用于解析的XML原始buffer。此方法返回错误代码。


Error read() 🔗

解析文件中的下一个节点。此方法返回错误代码。


Error seek(position: int) 🔗

将缓冲区光标移动到某个偏移量(从开头开始)并读取那里的下一个节点。此方法返回错误代码。


void skip_section() 🔗

跳过当前部分。如果当前解析的节点包含更多内部节点,它们将被忽略,光标将转到当前元素的关闭处。