XMLParser

继承: RefCounted < Object

为创建 XML 文件解析器提供低阶接口。

描述

为创建 XML 文件解析器提供低阶接口。制作自定义 XML 解析器时,可以将这个类作为基础。

要解析 XML,你必须使用 open 方法打开文件,或者使用 open_buffer 方法打开缓冲区。然后必须使用 read 方法解析后续节点。大多数方法使用的是当前解析节点。

以下是使用 XMLParser 解析 SVG 文件(基于 XML)的粒子,会输出所有的元素,以字典的形式输出对应的属性:

GDScriptC#

  1. var parser = XMLParser.new()
  2. parser.open("path/to/file.svg")
  3. while parser.read() != ERR_FILE_EOF:
  4. if parser.get_node_type() == XMLParser.NODE_ELEMENT:
  5. var node_name = parser.get_node_name()
  6. var attributes_dict = {}
  7. for idx in range(parser.get_attribute_count()):
  8. attributes_dict[parser.get_attribute_name(idx)] = parser.get_attribute_value(idx)
  9. print("元素 ", node_name, " 包含的属性有:", attributes_dict)
  1. var parser = new XmlParser();
  2. parser.Open("path/to/file.svg");
  3. while (parser.Read() != Error.FileEof)
  4. {
  5. if (parser.GetNodeType() == XmlParser.NodeType.Element)
  6. {
  7. var nodeName = parser.GetNodeName();
  8. var attributesDict = new Godot.Collections.Dictionary();
  9. for (int idx = 0; idx < parser.GetAttributeCount(); idx++)
  10. {
  11. attributesDict[parser.GetAttributeName(idx)] = parser.GetAttributeValue(idx);
  12. }
  13. GD.Print($"元素 {nodeName} 包含的属性有:{attributesDict}");
  14. }
  15. }

方法

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_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,例如 <element />


Error open(file: String) 🔗

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


Error open_buffer(buffer: PackedByteArray) 🔗

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


Error read() 🔗

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


Error seek(position: int) 🔗

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


void skip_section() 🔗

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