Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

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 ( int idx ) const

String

get_attribute_value ( int idx ) const

int

get_current_line ( ) const

String

get_named_attribute_value ( String name ) const

String

get_named_attribute_value_safe ( String name ) const

String

get_node_data ( ) const

String

get_node_name ( ) const

int

get_node_offset ( ) const

NodeType

get_node_type ( )

bool

has_attribute ( String name ) const

bool

is_empty ( ) const

Error

open ( String file )

Error

open_buffer ( PackedByteArray buffer )

Error

read ( )

Error

seek ( int position )

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_ELEMENTNODE_ELEMENT_END 时调用这个方法,则该计数不会更新,仍然反映的是之前的元素。


String get_attribute_name ( int idx ) const

返回当前解析元素中某个属性的名称,属性由 idx 索引指定。


String get_attribute_value ( int idx ) const

返回当前解析元素中某个属性的取值,属性由 idx 索引指定。


int get_current_line ( ) const

返回解析文件中的当前行,从 0 开始计数。


String get_named_attribute_value ( String name ) const

返回当前解析元素中某个属性的取值,属性由名称 name 指定。如果该元素没有符合要求的属性,则会引发错误。


String get_named_attribute_value_safe ( String name ) const

返回当前解析元素中某个属性的取值,属性由名称 name 指定。如果该元素没有符合要求的属性,则会返回空字符串。


String get_node_data ( ) const

返回文本节点的内容。如果当前解析节点是其他类型,则会引发错误。


String get_node_name ( ) const

返回元素节点的名称。如果当前解析节点既不是 NODE_ELEMENT 类型又不是 NODE_ELEMENT_END 类型,则会引发错误。


int get_node_offset ( ) const

返回当前解析节点相对于文件或缓冲区开始处的字节偏移量。通常等价于读取位置之前的字符数。


NodeType get_node_type ( )

返回当前节点的类型。请使用 NodeType 常量进行比较。


bool has_attribute ( String name ) const

如果当前解析元素存在名为 name 的属性,则返回 true


bool is_empty ( ) const

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


Error open ( String file )

打开 XML 文件 file 进行解析。这个方法返回的是错误码。


Error open_buffer ( PackedByteArray buffer )

打开 XML 原始缓冲区 buffer 进行解析。这个方法返回的是错误码。


Error read ( )

解析文件的下一个节点。这个方法返回的是错误码。


Error seek ( int position )

将缓冲区光标移动到某一偏移量(相对于开始位置)并在那里读取下一个节点。这个方法返回的是错误码。


void skip_section ( )

跳过当前部分。如果当前解析的节点包含其他内部节点,则会忽略这些节点,光标将跳转到当前元素的结尾处。