Inhalt

Telefon-Anwendungen erstellen Veröffentlichung auf WordPress

XML-Datenbanken


Dieses fortgeschrittene Tutorial veranschaulicht, wie zwei Arten von sehr einfachen XML-Datenbanken erstellt werden können.

Das Lesen von XML ist kein Problem, aufgrund von Sicherheitseinschränkungen ist es aber nicht möglich, die XML-Datei direkt aus HTML oder dem Hippani Animator zu speichern. Es wird eine Server-Page benötigt, um mit dem Webserver zu interagieren. Wir verwenden ASPX-Server Pages die in c# geschrieben wurden. Es können auch andere Server Pages und Sprachenverwendet werden. ASPX und c# sind würde den Rahmen dieser Dokumentation sprengen. Für Anpassungen und um diese Beispiele zu erweitern, kann weiterführende Literatur erforderlich sein.

Sie benötigen einen Microsoft Windows Webserver (IIS), um die ASPX-Dateien zu hosten. Sie müssen auch Webserver-Berechtigungen zum Erstellen und Schreiben von Dateien festlegen.


Einzelnen Datensatz Datenbanken

Diese einfache Datenbank speichert eine Liste von Werten. Jeder Wert hat einen Namen.

Zum Beispiel:

HighScore=10000

PlayerName=Zara

Location=France

Erstellen Sie eine ASPX-Datei auf Ihrem Webserver, nennen Sie sie XMLDatabase.aspx. Verwenden Sie den folgenden Code. Eine ASPX-Datei ist einfach eine Textdatei mit der Endung .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());
%>


Die ASPX-Server Page übernimmt das Bearbeiten einer XML-Datei.

Wenn die XML-Datei vorhanden ist, lädt die ASPX die XML-Daten in ein Wörterbuch. Anschließend wird geprüft ob neuen Werte eingegangen sind. Enthält sie einen neuen Wert, wird er zum Wörterbuch hinzugefügt und falls ein aktueller Wert vorhanden ist, wird dieser aktualisiert. Basierend auf dem Wörterbuch wird dann eine neue XML-Datei erstellt. Sofern ein neuer Wert hinzugefügt wurde, wird die neue XML-Datei gespeichert. Abschließend wird die XML-Daten zurückgegeben.

Sie können die Seite testen, indem Sie sie in einem beliebigen Webbrowser öffnen.

Daten werden gesendet, indem Sie die ASPX-Seite geladen und einen Namen und einen Wert.

Zum Beispiel:

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

Die Daten werden in einer XML-Datei speichern, die folgendermaßen aussieht:


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

Dies ist ein Beispiel, wie Daten im Hippani Animator an die ASPX-Seite verschickt werden können.


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);
}
}

Daten werden empfangen, indem Sie einfach die ASPX-Datei laden.

Zum Beispiel:
http://www.MyWebServer.com/XMLDatabase.aspx

Dies ist ein Beispiel wie man Daten von der ASPX-Seite im Hippani Animator lädt.


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!!!");
}
}

Mehrere Record-Datenbanken

Diese komplexere Datenbank speichert eine Liste von Datensätzen. Jeder Datensatz enthält eine Liste von Werten. Jeder Wert hat einen Namen.

Zum Beispiel:

Satz 1:

FirstName=Andrew

Age=23

Satz 2:

FirstName=Andrea

Age=42

Diese Art der XML-Datenbank funktioniert effektiv für bis zu 100 Datensätze. Bei größeren Datenbanken bräuchten Sie entweder mehrere XML-Dateien oder müssten eine richtige Datenbank wie SQL verwenden.

Erstellen eine weitere ASPX-Datei auf Ihrem Webserver und nennen Sie sie XMLDatabase2.aspx. Verwenden Sie den folgenden Code.


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


Diese ASPX-Server Page ist komplexer. Auch sie übernimmt die bearbeitung einer XML-Datei.

Wenn die XML-Datei vorhanden ist, lädt die ASPX die XML-Daten in ein Wörterbuch. Anschließend wird geprüft ob neuen Werte eingegangen sind. Wenn es einen neuen Wert und einen Index gibt, wird der Eintrag dem Wörterbuch hinzugefügt. Der Wert wird aktualisiert, sofern er schn vorhanden ist. Basierend auf dem Wörterbuch wird dann eine neue XML-Datei erstellt. Sofern ein neuer Wert hinzugefügt wurde, wird die neue XML-Datei gespeichert. Abschließend wird die XML-Daten zurückgegeben.

Sie können die Seite testen, indem Sie sie in einem beliebigen Webbrowser öffnen.

Die Daten werden gesendet, indem Sie die ASPX-Seite laden, einschließlich Index, Name und Wert.

Zum Beispiel:

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

Die Daten werden in einer XML-Datei gespeichert, die folgendermaßen aussieht:


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

Dies ist ein Beispiel zum Senden von Daten an die ASPX-Seite im 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);
}
}


Daten werden empfangen, indem Sie einfach die ASPX-Datei laden.

Zum Beispiel:
http://www.MyWebServer.com/XMLDatabase.aspx

Dies ist ein Beispiel wie man Daten von der ASPX-Seite im 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!!!");
}
}

Telefon-Anwendungen erstellen Veröffentlichung auf WordPress
Diese Dokumentation wurde aus dem englischen, mit einem online-Übersetzer übersetzt. Wir entschuldigen uns, wenn Sie irgendwelche Fehler finden. Wenn Sie uns Korrekturen helfen möchten. Gibt es ein Übersetzungseditor in Hippani Animator (im Menü "Hilfe"). Kostenlose Lizenz-Schlüssel geben wir jedem, der mehr als 100 Sätze korrigiert. Bitte kontaktieren Sie uns für weitere Details.