XMLParser
继承: RefCounted < Object
为创建 XML 文件解析器提供低阶接口。
描述
为创建 XML 文件解析器提供低阶接口。制作自定义 XML 解析器时,可以将这个类作为基础。
要解析 XML,你必须使用 open 方法打开文件,或者使用 open_buffer 方法打开缓冲区。然后必须使用 read 方法解析后续节点。大多数方法使用的是当前解析节点。
以下是使用 XMLParser 解析 SVG 文件(基于 XML)的粒子,会输出所有的元素,以字典的形式输出对应的属性:
GDScriptC#
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() 🔗
跳过当前部分。如果当前解析的节点包含其他内部节点,则会忽略这些节点,光标将跳转到当前元素的结尾处。