更新時間:2022-01-21 10:48:37 來源:動力節點 瀏覽1965次
本課將向您展示如何加載 XML 文件并訪問數據以在您的應用程序中使用。XML 文件對于存儲首選項設置、使用 Web 以及需要與其他程序共享數據的情況非常有用。
LiveCode 提供了一個功能完善的庫來處理 XML 文件,這可能需要一點時間來適應,但使用起來非常簡單。
我們首先創建一個堆棧并將一個按鈕和一個字段拖到它上面。該按鈕將包含我們用于讀取 XML 文件的 LiveCode 代碼。該字段將包含從文件中讀取的結果數據,將字段名稱設置為“信息”。將此堆棧保存在您的桌面上。
使用 Windows 上的記事本或 Mac OS X 上的 TextEdit 創建示例首選項 XML 文件。該文件應該是純文本。在桌面上將文件另存為“Preferences.xml”。XML 數據如下所示:
<preferences>
<textColor>blue</textColor>
<textSize>16</textSize>
<introMessage size="18">Welcome guest, please click the button below to log in</introMessage>
<recentDocuments>
<recentDocument>C:/Documents and Settings/Administrator/Documents/DraftReport.txt</recentDocument>
<recentDocument>C:/Reports/2009Final.txt</recentDocument>
<recentDocument>C:/Documents and Settings/Administrator/Desktop/Temp.txt</recentDocument>
</recentDocuments>
</preferences>
通過選擇它來編輯按鈕的腳本,然后單擊主菜單欄中的“腳本”按鈕。對于本例,我們將加載一個包含應用程序首選項的 XML 文件。
使用以下代碼開始腳本:
1.點擊按鈕時,加載首選項并將它們放入字段中
on mouseUp
loadPreferences
end mouseUp
2.加載首選項文件
加載首選項文件有兩個部分。第一部分是將文件讀入內存并創建一個 XML“樹”。第二部分是處理樹并從中提取數據。
此函數讀取 XML 文件,并返回樹。樹表示為一個數字,實際的樹結構和數據由 LiveCode 管理,因此我們無需擔心。
command loadPreferences
local tTree
put readPreferencesToXMLTree() into tTree
if tTree is empty then
exit loadPreferences
end if
# Read the preferences we require from the tree and display them.
processPreferencesTree tTree
# Close the XML tree.
# This will free up the memory that the tree was using and prevent our application
# using more memory than it needs or "leaking" memory by creating multiple trees
# without closing any of them.
revXMLDeleteTree tTree
end loadPreferences
請注意,這段代碼還沒有做任何事情,因為我們還沒有實現函數 readPreferencesToXMLTree 和命令 processPreferencesTree。
接下來,我們實現一個函數來讀取 XML。這分兩步完成,首先將文件讀入一個變量,就像任何其他文本文件一樣,其次,從文件中創建一個 XML“樹”。這棵樹允許我們輕松地操作 XML 數據。
添加代碼以讀取 XML 文件,如下所示。
private function readPreferencesToXMLTree
# Find the XML file on disk.
# This is for now assumed to be in the same location as the stack / application.
# Note that we restore the itemDelimiter to comma (its default value) afterwards.
# This is not essential but its good practice to avoid tricky bugs
# that can arise due to unexpected delimiter values.
set the itemDelimiter to slash
local tPreferencesFile
put item 1 to -2 of the effective filename of this stack & "/Preferences.xml" into tPreferencesFile
set the itemDelimiter to comma
# Read the preferences data from the file into a variable.
# Always check for the result when reading files
# as its possible that the file may have been deleted or moved.
local tPreferencesData, tResult
put url ("file:" & tPreferencesFile) into tPreferencesData
put the result into tResult
if tResult is not empty then
answer error "Failed to read preferences file at location: " & tPreferencesFile
return empty
end if
# Create the XML "tree" from the data,
# checking to make sure that the file has loaded properly.
# The revCreateXMLTree function will return a number
# (the tree's "handle" or "id") if it succeeds,
# otherwise it will return a message saying why it failed.
local tTree
put revXMLCreateTree(tPreferencesData, false, true, false) into tTree
if tTree is not an integer then
answer error "Failed to process preferences file with error: " & tTree
return empty
end if
return tTree
end readPreferencesToXMLTree
一旦我們有了 XML 樹,最后一步是使用 LiveCode 的 XML 庫從中獲取所需的信息。我們使用對 XML 庫的一系列調用來從樹中提取每條信息。
private command processPreferencesTree pTree
# Extract the text color and text size preferences.
# These are simple nodes in the XML file,
# we can get what is inside them using the revXMLNodeContents function
# This function will return a string beginning with "xmlerr,"
# if it fails, but we don't check this
# here as we created the file and we know it won't fail.
local tTextColor
put revXMLNodeContents(pTree, "preferences/textColor") into tTextColor
local tTextSize
put revXMLNodeContents(pTree, "preferences/textSize") into tTextSize
# Extract the introductory message preference.
# This node has an attribute. We extract the contents and the
# attribute in two separate calls.
# The function revXMLAttribute allows us to read attributes from XML files,
# its exactly the same as revXMLNodeContents,
# except that you also need to tell it which attribute you want.
local tIntroMessage
put revXMLNodeContents(pTree, "preferences/introMessage") into tIntroMessage
local tIntroMessageSize
put revXMLAttribute(pTree, "preferences/introMessage", "size") into tIntroMessageSize
# Extract the recent documents list.
# This is a nested list of nodes, which could have any number of items.
# First, we get a list of the recent documents, then we can loop
# through them and get each one in turn.
# The revXMLChildNames function is useful for returning a list of nodes like this.
# The last parameter is important as it tells the function to return a unique
# specifier for each node, allowing us to access them correctly. This will
# look something like:
# recentDocument[1]
# recentDocument[2]
# recentDocument[3]
local tRecentDocuments
put revXMLChildNames(pTree, "preferences/recentDocuments", return, "recentDocument", true) into tRecentDocuments
# To get each document, we just use revXMLNodeContents again.
# However here we concatentate the name of each node
# with the path that all recent document nodes have in common,
# to get the complete path.
local tListOfRecentDocuments
repeat for each line tRecentDocument in tRecentDocuments
put revXMLNodeContents(pTree, "preferences/recentDocuments/" & tRecentDocument) & return after tListOfRecentDocuments
end repeat
delete the last char of tListOfRecentDocuments
# Now we output what we read from the file to see if it worked.
local tOutput
put "Text Color = " & tTextColor & return after tOutput
put "Text Size = " & tTextSize & return after tOutput
put return after tOutput
put "Introductory Message (size: " & tIntroMessageSize & ") = " & return after tOutput
put tIntroMessage & return & return after tOutput
put "Recent Documents = " & return after tOutput
put tListOfRecentDocuments after tOutput
set the text of field "Information" to tOutput
end processPreferencesTree
測試堆棧切換到運行模式并單擊按鈕。
以上就是關于“XML文件讀取的方法”介紹,大家如果想了解更多相關知識,不妨來關注一下動力節點的Java視頻,里面的課程內容詳細,通俗易懂,適合小白學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習