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 🔗
Returns the name of a node. This method will raise an error if the currently parsed node is a text node.
Note: The content of a NODE_CDATA node and the comment string of a NODE_COMMENT node are also considered names.
返回目前解析節點相對於檔或緩衝區開始處的位元組偏移量。通常等價於讀取位置之前的字元數。
返回目前節點的型別。請使用 NodeType 常數進行比較。
bool has_attribute(name: String) const 🔗
如果目前解析元素存在名為 name 的屬性,則返回 true。
如果目前解析元素為空則返回 true,例如 <element />。
打開 XML 檔 file 進行解析。這個方法返回的是錯誤碼。
Error open_buffer(buffer: PackedByteArray) 🔗
打開 XML 原始緩衝區 buffer 進行解析。這個方法返回的是錯誤碼。
解析檔的下一個節點。這個方法返回的是錯誤碼。
將緩衝區游標移動到某一偏移量(相對於開始位置)並在那裡讀取下一個節點。這個方法返回的是錯誤碼。
void skip_section() 🔗
跳過目前部分。如果目前解析的節點包含其他內部節點,則會忽略這些節點,游標將跳轉到目前元素的結尾處。