Баз даних 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 фраз. Будь ласка, зв'яжіться з нами для більш докладної інформації.