Conţinutul

Crearea Apps telefon Publicarea pe WordPress

Baze de date XML


Acest subiect avansate demonstrează cum se creează două tipuri de baze de date XML foarte simplu.

Lectură XML este drept înainte. Cu toate acestea, este imposibil să salvați XML direct din HTML sau Hippani Animator din cauza restricţiilor de securitate. O pagina de server este necesar pentru a interactiona cu serverul de web. Am folosit pagini ASPX server scris în C#. Alte pagini de server şi limbi ar putea fi folosit în schimb. ASPX şi C# sunt dincolo de domeniul de aplicare al acestei documentații. Pentru a personaliza şi de a extinde pe aceste exemple, reading suplimentare pot fi necesare.

Veţi avea nevoie de un server de web Microsoft Windows (IIS) pentru a găzdui fişierele ASPX. De asemenea, trebuie să setaţi permisiuni de serverul web pentru a crea şi scrie fişiere.


Singură înregistrare Baze de date

Această bază de date simplă stochează o listă de valori. Fiecare valoare a unui nume.

De exemplu:

HighScore=10000

PlayerName=Zara

Location=France

Creaţi un fişier de ASPX web server numit XMLDatabase.aspx. Utilizaţi următorul cod. Un fişier ASPX este pur şi simplu fişier text cu extensia .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());
%>


Pagină ASPX server se ocupă de manipulare a un fişier XML.

Dacă există fișierul XML, apoi ASPX încarcă datele XML într-un dicţionar. Apoi se verifică pentru a vedea dacă orice valori noi au fost primite. În cazul în care nu există o valoare nouă, adăugaţi-l la dicţionarul, actualiza valoarea curentă dacă există deja. Apoi creează un nou fişier XML bazat pe dicţionar. Dacă a existat o valoare adăugată, este stocat fişierul XML nou. În cele din urmă, XML este returnat.

Puteţi testa pagina deschizându-l în orice browser web.

Datele sunt trimise de încărcare pagină ASPX, şi inclusiv un nume şi o valoare.

De exemplu:

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

Datele vor fi magazin într-un fişier XML care arata ca acest lucru:


<Data>
<HighScore>10000</HighScore>
<PlayerName>Zara</PlayerName>
<Location>France</Location>
</Data>

Acesta este un exemplu de cum pentru a trimite date la pagina ASPX în 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);
}
}

Date este primit de către pur şi simplu de încărcare fişier ASPX.

De exemplu:
http://www.MyWebServer.com/XMLDatabase.aspx

Acesta este un exemplu de cum pentru a obţine date din pagina 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!!!");
}
}

Mai multe baze de date de înregistrare

Această bază de date mai complexe stochează o listă de înregistrări. Fiecare înregistrare conţine o listă de valori. Fiecare valoare a unui nume.

De exemplu:

Înregistrare 1:

FirstName=Andrew

Age=23

Înregistrare 2:

FirstName=Andrea

Age=42

Acest tip de date XML va lucra efectiv pentru maximum 100 de înregistrări. Baze de date mai mare fie ar trebui mai multe fişiere XML sau fi conectat la o bază de date corespunzătoare, precum SQL.

Creaţi un alt ASPX fişier pe serverul de web numit XMLDatabase2.aspx. Utilizaţi următorul cod.


<%@ 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());
%>


Această pagină ASPX server este mai complexă. Din nou, se ocupa de manipularea de un fişier XML.

Dacă există fișierul XML, apoi ASPX încarcă datele XML într-un dicţionar. Apoi se verifică pentru a vedea dacă orice valori noi au fost primite. În cazul în care există o nouă valoare şi un index, adăugaţi-l la înregistrare în dicţionar, actualiza valoarea curentă dacă există deja. Apoi creează un nou fişier XML bazat pe dicţionar. Dacă a existat o valoare adăugată, este stocat fişierul XML nou. În cele din urmă, XML este returnat.

Puteţi testa pagina deschizându-l în orice browser web.

Datele sunt trimise de încărcare pagină ASPX, şi inclusiv un index, numele şi valoarea.

De exemplu:

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

Datele vor fi magazin într-un fişier XML care arata ca acest lucru:


<Data>
<Record Index="1">
<FirstName>Andrew</FirstName>
<Age>23</Age>
</Record>
<Record Index="2">
<FirstName>Andrea</FirstName>
<Age>42</Age>
</Record>
</Data>

Acesta este un exemplu de cum pentru a trimite date la pagina ASPX în 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);
}
}


Date este primit de către pur şi simplu de încărcare fişier ASPX.

De exemplu:
http://www.MyWebServer.com/XMLDatabase.aspx

Acesta este un exemplu de cum pentru a obţine date din pagina 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!!!");
}
}

Crearea Apps telefon Publicarea pe WordPress
Această documentaţie a fost tradus din limba engleză, folosind un translator online. Ne cerem scuze dacă găsiţi greşeli. Dacă doriţi pentru a ne ajuta face corecturi. Există un editor de traducere în Hippani Animator (în meniul Ajutor). Vom da cheile de licenţă gratuită pentru oricine care corecteaza mai mult de 100 de fraze. Va rugam sa ne contactati pentru mai multe detalii.