XML database
Topik lanjutan ini menunjukkan bagaimana untuk membuat dua jenis database XML sangat sederhana.
Membaca XML adalah lurus ke depan. Namun, tidak mungkin untuk menyelamatkan XML langsung dari HTML atau Hippani Animator karena batasan keamanan. Halaman server diperlukan untuk berinteraksi dengan web server. Kami telah menggunakan server halaman ASPX ditulis dalam C#. Server halaman dan bahasa lainnya dapat digunakan sebagai gantinya. ASPX dan C# berada di luar lingkup dokumentasi ini. Untuk menyesuaikan dan memperluas contoh-contoh ini, bacaan lebih lanjut mungkin diperlukan.
Anda akan membutuhkan Microsoft Windows web server (IIS) untuk meng-host file ASPX. Anda juga akan perlu mengatur perizinan server web untuk membuat dan menulis file.
Satu catatan database
Database sederhana ini menyimpan daftar nilai-nilai. Setiap nilai memiliki nama.
Sebagai contoh:
HighScore=10000
PlayerName=Zara
Location=France
Buat file ASPX pada server web Anda disebut XMLDatabase.aspx. Gunakan kode berikut. ASPX adalah hanya teks file dengan ekstensi .aspx.
<%@ Page Language="C#" %>
<%@ Import namespace="System.IO" %>
<%@ Import namespace="System.Xml" %>
<%@ Import namespace="System.Collections.Generic" %>
<%
string DataFilename=Server.MapPath("Data.xml");
Dictionary<string,string> MyData=new Dictionary<string,string>();
bool DataChanged=false;
// Load the xml data into a dictionary
if(File.Exists(DataFilename)){
XmlDocument Doc=new XmlDocument();
Doc.Load(DataFilename);
XmlNode N=Doc.DocumentElement.FirstChild;
while(N!=null){ //Iterate through the nodes
if(!MyData.ContainsKey(N.Name)){ //If the dictionary does not contain the node name, add it and the text it contains.
MyData.Add(N.Name,N.InnerText);
}
N=N.NextSibling;
}
}
//Add any new Name and Value values sent to the page.
string Name=Context.Request["Name"];
string Value=Context.Request["Value"];
if(!String.IsNullOrEmpty(Name)){
if(!MyData.ContainsKey(Name)){ //If the dictionary does not contain the name, add it and the value.
MyData.Add(Name,Value);
}else{ //Replace the value if the name already exists in the dictionary.
MyData[Name]=Value;
}
DataChanged=true;
}
//Generate a new xml file.
StringBuilder NewXML=new StringBuilder();
NewXML.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n");
NewXML.Append("<Data>\r\n");
Dictionary<string,string>.Enumerator Enum=MyData.GetEnumerator();
while(Enum.MoveNext()){
NewXML.Append("<"+Enum.Current.Key+">"+HttpUtility.HtmlEncode(Enum.Current.Value)+"</"+Enum.Current.Key+">\r\n");
}
NewXML.Append("</Data>\r\n");
//Save the data file if it has been changed.
if(DataChanged){
StreamWriter SW = new StreamWriter(DataFilename);
SW.WriteLine(NewXML.ToString());
SW.Close();
}
//Return the xml file.
Context.Response.ContentType = "text/xml";
Response.Write(NewXML.ToString());
%>
Halaman server ASPX menangani manipulasi XML file.
Jika ada XML file, kemudian ASPX memuat XML data ke dalam kamus. Kemudian memeriksa untuk melihat jika ada nilai baru telah diterima. Jika ada nilai baru, menambahkannya ke kamus, update nilai saat ini jika sudah ada. Kemudian membuat file XML baru berdasarkan Kamus. Jika ada nilai baru yang ditambahkan, kemudian file XML baru disimpan. Akhirnya, XML dikembalikan.
Anda dapat menguji halaman dengan membukanya di web browser.
Data dikirim oleh loading halaman ASPX dan termasuk nama dan nilai.
Sebagai contoh:
http://www.MyWebServer.com/XMLDatabase.aspx?Name=HighScore&Value=10000
http://www.MyWebServer.com/XMLDatabase.aspx?Name=PlayerName&Value=Zara
http://www.MyWebServer.com/XMLDatabase.aspx?Name=Location&Value=France
Data akan toko dalam sebuah file XML yang terlihat seperti ini:
<Data>
<HighScore>10000</HighScore>
<PlayerName>Zara</PlayerName>
<Location>France</Location>
</Data>
Ini adalah contoh bagaimana untuk mengirimkan data ke halaman ASPX di Hippani Animator.
var Name="HighScore";
var Value="10000";
OpenXMLUrl("http://www.MyWebServer.com/XMLDatabase.aspx?Name="+escape(Name)+"&Value="+escape(Value),Result);
function Result(XML){
if(XML.status==200){
alert("Saved.");
}else{
alert("Error Code "+XML.status);
}
}
Data ini diterima oleh hanya memuat ASPX file.
Sebagai contoh:
http://www.MyWebServer.com/XMLDatabase.aspx
Ini adalah contoh bagaimana mengambil data dari halaman ASPX dengan Hippani Animator.
OpenXMLUrl("http://www.MyWebServer.com/XMLDatabase.aspx",Result);
function Result(XML){
if(XML.status==200){
var Node=XML.documentElement.firstChild;
var List="List:\r\n";
while(Node!=null){
List+=Node.nodeName+"="+Node.firstChild.nodeValue+"\r\n";
Node=Node.nextSibling;
}
alert(List);
}else{
alert(XML.status+" Error!!!");
}
}
Beberapa catatan database
Database ini lebih kompleks menyimpan daftar catatan. Setiap record berisi daftar nilai-nilai. Setiap nilai memiliki nama.
Sebagai contoh:
Catatan 1:
FirstName=Andrew
Age=23
Catatan 2:
FirstName=Andrea
Age=42
Ini jenis XML database akan bekerja secara efektif untuk hingga 100 record. Database yang lebih besar akan baik perlu beberapa file XML atau terhubung ke database yang tepat seperti SQL.
Membuat file ASPX lain pada server web Anda disebut XMLDatabase2.aspx. Gunakan kode berikut.
<%@ Page Language="C#" %>
<%@ Import namespace="System.IO" %>
<%@ Import namespace="System.Xml" %>
<%@ Import namespace="System.Collections.Generic" %>
<%
string DataFilename=Server.MapPath("Data2.xml");
Dictionary<int,Dictionary<string,string>> MyData=new Dictionary<int,Dictionary<string,string>>();
bool DataChanged=false;
Dictionary<string,string> Record=null;
int Index=0;
// Load the xml data into a dictionary
if(File.Exists(DataFilename)){
XmlDocument Doc=new XmlDocument();
Doc.Load(DataFilename);
XmlNode N=Doc.DocumentElement.FirstChild,M=null;
while(N!=null){ //Iterate through the record nodes
Index=Convert.ToInt32(N.Attributes["Index"].Value); //Get the index value of the record.
Record=new Dictionary<string,string>();
M=N.FirstChild;
while(M!=null){ //Iterate through the value nodes
if(!Record.ContainsKey(M.Name)){ //If the record does not contain the node name, add it and the text it contains.
Record.Add(M.Name,M.InnerText);
}
M=M.NextSibling;
}
if(!MyData.ContainsKey(Index)){ //If the dictionary does not contain the record index, add it.
MyData.Add(Index,Record);
}
N=N.NextSibling;
}
}
//Add any new Name and Value values sent to the page. Use the Index value to locate the correct record.
string Name=Context.Request["Name"];
string Value=Context.Request["Value"];
Index=Convert.ToInt32(Context.Request["Index"]);
if(!String.IsNullOrEmpty(Name)&&Index>0){
if(MyData.ContainsKey(Index)){ //If the dictionary contains the record index.
Record=MyData[Index];
}else{ //If the dictionary does not contain the record. Create a new empty record and add it.
Record=new Dictionary<string,string>();
MyData.Add(Index,Record);
}
if(!Record.ContainsKey(Name)){ //If the record does not contain the name, add it and the value.
Record.Add(Name,Value);
}else{ //Replace the value if the name already exists in the record.
Record[Name]=Value;
}
DataChanged=true;
}
//Generate a new xml file.
StringBuilder NewXML=new StringBuilder();
NewXML.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n");
NewXML.Append("<Data>\r\n");
Dictionary<int,Dictionary<string,string>>.Enumerator Enum=MyData.GetEnumerator();
Dictionary<string,string>.Enumerator EnumRecord;
while(Enum.MoveNext()){
NewXML.Append("<Record Index=\""+Enum.Current.Key+"\">\r\n");
EnumRecord=Enum.Current.Value.GetEnumerator();
while(EnumRecord.MoveNext()){
NewXML.Append("<"+EnumRecord.Current.Key+">"+HttpUtility.HtmlEncode(EnumRecord.Current.Value)+"</"+EnumRecord.Current.Key+">\r\n");
}
NewXML.Append("</Record>\r\n");
}
NewXML.Append("</Data>\r\n");
//Save the data file if it has been changed.
if(DataChanged){
StreamWriter SW = new StreamWriter(DataFilename);
SW.WriteLine(NewXML.ToString());
SW.Close();
}
//Return the xml file.
Context.Response.ContentType = "text/xml";
Response.Write(NewXML.ToString());
%>
Halaman ASPX server ini lebih kompleks. Sekali lagi, ini menangani manipulasi XML file.
Jika ada XML file, kemudian ASPX memuat XML data ke dalam kamus. Kemudian memeriksa untuk melihat jika ada nilai baru telah diterima. Jika ada nilai baru dan indeks, menambahkannya ke catatan dalam kamus, update nilai saat ini jika sudah ada. Kemudian membuat file XML baru berdasarkan Kamus. Jika ada nilai baru yang ditambahkan, kemudian file XML baru disimpan. Akhirnya, XML dikembalikan.
Anda dapat menguji halaman dengan membukanya di web browser.
Data dikirim oleh loading halaman ASPX dan termasuk indeks, nama dan nilai.
Sebagai contoh:
http://www.MyWebServer.com/XMLDatabase2.aspx?Index=1&Name=FirstName&Value=Andrew
http://www.MyWebServer.com/XMLDatabase2.aspx?Index=1&Name=Age&Value=23
http://www.MyWebServer.com/XMLDatabase2.aspx?Index=2&Name=FirstName&Value=Andrea
http://www.MyWebServer.com/XMLDatabase2.aspx?Index=2&Name=Age&Value=42
Data akan toko dalam sebuah file XML yang terlihat seperti ini:
<Data>
<Record Index="1">
<FirstName>Andrew</FirstName>
<Age>23</Age>
</Record>
<Record Index="2">
<FirstName>Andrea</FirstName>
<Age>42</Age>
</Record>
</Data>
Ini adalah contoh bagaimana untuk mengirimkan data ke halaman ASPX di Hippani Animator.
var Index=1;
var Name="FirstName";
var Value="Andrew";
OpenXMLUrl("http://www.MyWebServer.com/XMLDatabase2.aspx?Index="+Index+"&Name="+escape(Name)+"&Value="+escape(Value),Result);
function Result(XML){
if(XML.status==200){
alert("Saved.");
}else{
alert("Error Code "+XML.status);
}
}
Data ini diterima oleh hanya memuat ASPX file.
Sebagai contoh:
http://www.MyWebServer.com/XMLDatabase.aspx
Ini adalah contoh bagaimana mengambil data dari halaman ASPX dengan Hippani Animator.
OpenXMLUrl("http://www.MyWebServer.com/XMLDatabase2.aspx",Result);
function Result(XML){
if(XML.status==200){
var Record=XML.documentElement.firstChild,Node=null;
var List="List:\r\n";
while(Record!=null){
List+="Record: "+Record.attributes.getNamedItem("Index").value+"\r\n";
Node=Record.firstChild;
while(Node!=null){
List+=" "+Node.nodeName+"="+Node.firstChild.nodeValue+"\r\n";
Node=Node.nextSibling;
}
Record=Record.nextSibling;
}
alert(List);
}else{
alert(XML.status+" Error!!!");
}
}
Dokumentasi ini diterjemahkan dari bahasa Inggris, menggunakan penerjemah online. Kami Mohon maaf jika Anda menemukan kesalahan. Jika Anda ingin membantu kami membuat koreksi. Ada terjemahan editor di Hippani Animator (dalam menu Bantuan). Kami memberikan kunci lisensi gratis kepada siapa saja yang mengoreksi frase lebih dari 100. Silahkan hubungi kami untuk rincian lebih lanjut.