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)
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 i3D.Collections.Dictionary();
for (int idx = 0; idx < parser.GetAttributeCount(); idx++)
{
attributesDict[parser.GetAttributeName(idx)] = parser.GetAttributeValue(idx);
}
S3.Print($"The {nodeName} element has the following attributes: {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评论-->。
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,例如<元素/>。
打开用于解析的XMLfile。此方法返回错误代码。
Error open_buffer(buffer: PackedByteArray) 🔗
打开用于解析的XML原始buffer。此方法返回错误代码。
解析文件中的下一个节点。此方法返回错误代码。
将缓冲区光标移动到某个偏移量(从开头开始)并读取那里的下一个节点。此方法返回错误代码。
void skip_section() 🔗
跳过当前部分。如果当前解析的节点包含更多内部节点,它们将被忽略,光标将转到当前元素的关闭处。