Obsah

Vytvoření telefonní aplikace Publikování na WordPress

XML databáze


Toto pokročilé téma ukazuje, jak vytvořit dva druhy velmi jednoduchý XML databází.

Čtení XML je rovně vpřed. Je však možné zachránit XML přímo z HTML nebo Hippani Animator z důvodu omezení zabezpečení. Stránky serveru je povinen komunikovat s webovým serverem. Používáme ASPX stránky serveru napsaný v C#. Ostatní stránky serveru a jazyky lze použít místo. ASPX a C# jsou nad rámec této dokumentace. Chcete-li upravit a rozšířit na těchto příkladech, může být požadováno další čtení.

Budete potřebovat Microsoft Windows webový server (IIS), aby hostitelské soubory ASPX. Musíte také nastavit oprávnění webového serveru, vytvářet a zapisovat soubory.


Jediného záznamu databáze

Tato jednoduchá databáze ukládá seznam hodnot. Každá hodnota má název.

Například:

HighScore=10000

PlayerName=Zara

Location=France

Vytvořit soubor s příponou ASPX na vašem webovém serveru, nazývá XMLDatabase.aspx. Používejte následující kód. Soubor ASPX je jednoduše textový soubor s pří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());
%>


Na stránce ASPX server zpracovává manipulace souboru XML.

Existuje-li soubor XML, pak ASPX načte XML data do slovníku. Potom zkontroluje, pokud byly přijaty žádné nové hodnoty. Pokud novou hodnotu, přidejte jej do slovníku, aktualizovat aktuální hodnota, pokud již existuje. Potom vytvoří nový soubor XML založené na slovníku. Kdyby existoval novou přidanou hodnotu, nový XML soubor uložen. A konečně bude vrácena XML.

Tím, že jej otevřete v libovolném webovém prohlížeči, můžete stránku otestovat.

Data jsou odeslána načtením stránky ASPX a včetně názvu a hodnoty.

Napří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

Data budou úložiště v souboru XML, který vypadá takto:


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

Toto je příklad toho, jak posílat data na stránku 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);
}
}

Jednoduše načtením souboru ASPX jsou přijímána data.

Například:
http://www.MyWebServer.com/XMLDatabase.aspx

To je příklad, jak získat data ze stránky ASPX v 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!!!");
}
}

Více záznamů databáze

Tato komplexní databáze ukládá seznam záznamů. Každý záznam obsahuje seznam hodnot. Každá hodnota má název.

Například:

Rekord 1:

FirstName=Andrew

Age=23

Záznam 2:

FirstName=Andrea

Age=42

Tento typ XML databáze bude fungovat efektivně až 100 záznamů. Větší databáze by musel mít více soubory XML nebo být připojen k zavedení vhodné databáze, například SQL.

Vytvořit další soubor ASPX na vašem webovém serveru, nazývá XMLDatabase2.aspx. Používejte následující 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());
%>


Tato stránka ASPX serveru je složitější. Opět zpracovává manipulace souboru XML.

Existuje-li soubor XML, pak ASPX načte XML data do slovníku. Potom zkontroluje, pokud byly přijaty žádné nové hodnoty. Pokud novou hodnotu a indexu, přidejte jej do záznamu v slovníku, aktualizovat aktuální hodnota, pokud již existuje. Potom vytvoří nový soubor XML založené na slovníku. Kdyby existoval novou přidanou hodnotu, nový XML soubor uložen. A konečně bude vrácena XML.

Tím, že jej otevřete v libovolném webovém prohlížeči, můžete stránku otestovat.

Data jsou odeslána načtením stránky ASPX a včetně index, název a hodnotu.

Napří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

Data budou úložiště v souboru XML, který vypadá 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 příklad toho, jak posílat data na stránku 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);
}
}


Jednoduše načtením souboru ASPX jsou přijímána data.

Například:
http://www.MyWebServer.com/XMLDatabase.aspx

To je příklad, jak získat data ze stránky ASPX v 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!!!");
}
}

Vytvoření telefonní aplikace Publikování na WordPress
Tato dokumentace byla přeložena z angličtiny, pomocí on-line tlumočník. Omlouváme se, pokud najdete nějaké chyby. Pokud byste chtěli pomoci nám provést opravy. Zde je překlad editor v Hippani Animator (v nabídce Nápověda). Dáváme zdarma licenci klíče k nikomu, kdo opravuje více než 100 vět. Pro bližší informace nás prosím kontaktujte.