Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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 🔗
如果当前解析元素存在名为 name
的属性,则返回 true
。
如果当前解析元素为空则返回 true
,例如 <element />
。
打开 XML 文件 file
进行解析。这个方法返回的是错误码。
Error open_buffer(buffer: PackedByteArray) 🔗
打开 XML 原始缓冲区 buffer
进行解析。这个方法返回的是错误码。
解析文件的下一个节点。这个方法返回的是错误码。
将缓冲区光标移动到某一偏移量(相对于开始位置)并在那里读取下一个节点。这个方法返回的是错误码。
void skip_section() 🔗
跳过当前部分。如果当前解析的节点包含其他内部节点,则会忽略这些节点,光标将跳转到当前元素的结尾处。