XML бази данни
Разширени тази тема показва как да създадете два вида на много прости бази данни XML.
Четене XML е право напред. Обаче това е невъзможно да запишете XML директно от HTML или Hippani Animator поради ограниченията за сигурност. Сървър страница е необходимо да взаимодействат с уеб сървъра. Ние сме използвали ASPX сървър страници, написани на C#. Други страници сървър и езици могат да бъдат използвани вместо това. ASPX и C# са извън обхвата на тази документация. За да персонализирате и разширяване на тези примери, по-нататъшно четене може да се изисква.
Ти ще нужда Microsoft Windows уеб сървър (IIS) да бъде домакин на ASPX файлове. Вие също ще трябва да настроите уеб сървър разрешения да създавате и записвате файлове.
Един запис бази данни
Тази проста база данни съхранява списък от стойности. Всяка стойност има име.
За пример:
HighScore=10000
PlayerName=Zara
Location=France
Създаване на ASPX файл на вашия уеб сървър наречен XMLDatabase.aspx. Използвайте следния код. ASPX файл е просто текстов файл с разширение .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());
%>
ASPX страница сървъра обработва манипулиране на XML файл.
Ако XML файлът съществува, след което ASPX зарежда XML данните в речник. След това проверява дали всички нови стойности са били получили. Ако има нова стойност, да го добавите към речника, актуализиране на текущата стойност, ако тя вече съществува. След това създава нов XML файл на базата на речника. Ако има добавена нова стойност, нов XML файл е записан. И накрая XML се връща.
Можете да тествате страницата, като го отворите в уеб браузър.
Данните се изпращат чрез зареждане на ASPX страница, включително име и стойност.
За пример:
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
Данните ще се съхранява в XML файл, който изглежда така:
<Data>
<HighScore>10000</HighScore>
<PlayerName>Zara</PlayerName>
<Location>France</Location>
</Data>
Това е един пример за това как да изпрати данни на ASPX страница в 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);
}
}
Данните се получава чрез просто зареждане на ASPX файла.
За пример:
http://www.MyWebServer.com/XMLDatabase.aspx
Това е един пример за това как да получите данни от 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!!!");
}
}
Множество записи бази данни
Тази по-сложни база данни съхранява списък от записи. Всеки запис съдържа списък със стойности. Всяка стойност има име.
За пример:
Запис 1:
FirstName=Andrew
Age=23
Запис 2:
FirstName=Andrea
Age=42
Този тип на база данни тип XML ще работи ефективно за до 100 записа. Големите бази данни или ще трябва няколко XML файла или е свързан към подходяща база данни като SQL.
Създаване на друг ASPX файл на вашия уеб сървър наречен XMLDatabase2.aspx. Използвайте следния код.
<%@ 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());
%>
Този сървър ASPX страница е по-сложна. Отново той обработва манипулиране на XML файл.
Ако XML файлът съществува, след което ASPX зарежда XML данните в речник. След това проверява дали всички нови стойности са били получили. Ако има нова стойност и индекс, да го добавите към запис в речника, актуализиране на текущата стойност, ако тя вече съществува. След това създава нов XML файл на базата на речника. Ако има добавена нова стойност, нов XML файл е записан. И накрая XML се връща.
Можете да тествате страницата, като го отворите в уеб браузър.
Данните се изпращат чрез зареждане на ASPX страница и включващи индекс, име и стойност.
За пример:
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
Данните ще се съхранява в XML файл, който изглежда така:
<Data>
<Record Index="1">
<FirstName>Andrew</FirstName>
<Age>23</Age>
</Record>
<Record Index="2">
<FirstName>Andrea</FirstName>
<Age>42</Age>
</Record>
</Data>
Това е един пример за това как да изпрати данни на ASPX страница в 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);
}
}
Данните се получава чрез просто зареждане на ASPX файла.
За пример:
http://www.MyWebServer.com/XMLDatabase.aspx
Това е един пример за това как да получите данни от 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!!!");
}
}
Тази документация е преведена от английски език, използвайки онлайн преводач. Извиняваме се, ако забележите някакви грешки. Ако искате да ни помогне да корекции. Там е редактор на превод в Hippani Animator (в меню Помощ). Ние давам вън свободен позволение ключов камък към всеки, който коригира повече от 100 фрази. Свържете се с нас за повече подробности.