XML databázy
Tento pokročilý tému demonštruje ako vytvoriť dva druhy veľmi jednoduché XML databázy.
Čítanie XML je rovno vpred. Avšak, nie je možné uložiť XML priamo z HTML alebo Hippani Animator z dôvodu obmedzení zabezpečenia. Stránky server je potrebné komunikovať s webovým serverom. Sme použili stránky ASPX server napísaný v C#. Ďalšie jazyky a stránky servera mohol použiť. Nad rámec tejto publikácie sú ASPX a C#. Prispôsobiť a rozšíriť na tieto príklady, môže požadovať ďalšie čítanie.
Budete potrebovať Microsoft Windows web server (IIS) hostiť ASPX súbory. Budete tiež musieť nastaviť webový server povolenia pre vytváranie a zapisovať súbory.
Jediný záznam databázy
Táto jednoduchá databáza ukladá zoznam hodnôt. Každá hodnota má meno.
Napríklad:
HighScore=10000
PlayerName=Zara
Location=France
Vytvorenie súboru ASPX na webovom serveri s názvom XMLDatabase.aspx. Použite nasledujúci kód. Súbor ASPX je jednoducho textového súboru s príponou .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());
%>
Stránke ASPX server spracováva na manipuláciu s XML súbor.
Ak súbor XML neexistuje, ASPX načíta údaje XML do slovníka. Potom ju skontroluje, ak neboli doručené žiadne nové hodnoty. Ak existuje novú hodnotu, pridať do slovníka, ak už existuje aktualizovať aktuálnu hodnotu. Potom vytvorí nový súbor XML založený na slovníku. Ak tam bol nový pridanej, uloží nový súbor XML. Nakoniec sa vracia XML.
Môžete otestovať stránku otvoriť v ľubovoľnom webovom prehliadači.
Údaje sa odosielajú načítania stránky ASPX a vrátane názvu a hodnoty.
Napríklad:
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
Údaje budú ukladať v súbore XML, ktorý vyzerá takto:
<Data>
<HighScore>10000</HighScore>
<PlayerName>Zara</PlayerName>
<Location>France</Location>
</Data>
Toto je príklad toho, ako odoslať dáta na stránke ASPX v 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);
}
}
Jednoducho načítaním súboru ASPX je získané údaje.
Napríklad:
http://www.MyWebServer.com/XMLDatabase.aspx
Toto je príklad toho, ako sa dostať dát zo stránky ASPX 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!!!");
}
}
Viacero záznamov databázy
Zložitejšie databáza ukladá zoznam záznamov. Každý záznam obsahuje zoznam hodnôt. Každá hodnota má meno.
Napríklad:
Záznam:
FirstName=Andrew
Age=23
Záznam 2:
FirstName=Andrea
Age=42
Tento typ databázy XML bude pracovať efektívne pre až 100 záznamov. Rozsiahlejšími databázami by ani potrebovať viac súborov XML alebo byť pripojený k databáze správne napríklad SQL.
Vytvoriť ďalší ASPX súbor na webovom serveri s názvom XMLDatabase2.aspx. Použite nasledujúci kód.
<%@ 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());
%>
Tento server stránky ASPX je zložitejšia. Opäť, to zvláda na manipuláciu s XML súbor.
Ak súbor XML neexistuje, ASPX načíta údaje XML do slovníka. Potom ju skontroluje, ak neboli doručené žiadne nové hodnoty. Ak je novú hodnotu a index, pridať k záznamu v slovníku, aktualizovať aktuálnu hodnotu, ak už existuje. Potom vytvorí nový súbor XML založený na slovníku. Ak tam bol nový pridanej, uloží nový súbor XML. Nakoniec sa vracia XML.
Môžete otestovať stránku otvoriť v ľubovoľnom webovom prehliadači.
Údaje sa odosielajú vrátane index, názov a hodnotu a načítanie stránky ASPX.
Napríklad:
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
Údaje budú ukladať v súbore XML, ktorý vyzerá takto:
<Data>
<Record Index="1">
<FirstName>Andrew</FirstName>
<Age>23</Age>
</Record>
<Record Index="2">
<FirstName>Andrea</FirstName>
<Age>42</Age>
</Record>
</Data>
Toto je príklad toho, ako odoslať dáta na stránke ASPX v 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);
}
}
Jednoducho načítaním súboru ASPX je získané údaje.
Napríklad:
http://www.MyWebServer.com/XMLDatabase.aspx
Toto je príklad toho, ako sa dostať dát zo stránky ASPX 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!!!");
}
}
Táto dokumentácia bola preložená z angličtiny, pomocou on-line tlmočník. Ospravedlňujeme sa, ak nájdete nejaké chyby. Ak by ste chceli pomôcť nám opravy. Tu je preklad editor v Hippani Animator (v ponuke Pomocník). Sme rozdávať zadarmo licenčné kľúče pre každého, kto opravuje viac ako 100 fráz. Prosím, kontaktujte nás pre viac informácií.