XML datu bāzēm
Šo papildu tēmu parāda, kā izveidot divu veidu ļoti vienkārša XML datu bāzēm.
Reading XML ir taisni uz priekšu. Tomēr ir iespējams saglabāt XML datus tieši no HTML vai Hippani Animator drošības ierobežojumu dēļ. Servera lapā ir pienākums sadarboties ar web serveri. Mēs esam izmanto servera ASPX lapās, kas sarakstīta c#. Varētu izmantot cita servera lappuses un valodas. ASPX un c# ir plašāki par šo dokumentāciju. Pielāgot un paplašināt šos piemērus, var pieprasīt papildu lasāmviela.
Jums būs nepieciešams Microsoft Windows web serveris (IIS) uzņemt ASPX failus. Jums būs arī nepieciešams uzstādīt web servera atļaujas veidot un rakstīt failus.
Vienu ierakstu datu bāzēm
Šī vienkāršā datu bāzē glabā vērtību sarakstu. Katrai vērtībai ir nosaukums.
Piemēram:
HighScore=10000
PlayerName=Zara
Location=France
Izveidot ASPX failā jūsu web serverī, ko sauc par XMLDatabase.aspx. Izmantojiet šo kodu. ASPX ir vienkārši teksta fails ar paplašinājumu .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 lapu servera apstrādā XML failu manipulācijas.
Ja XML fails eksistē, tad ASPX ielādē XML datu vārdnīcu. Tad to pārbauda, ja ir saņemtas jaunas vērtības. Ja jaunu vērtību, pievienotu vārdnīcai, atjauniniet pašreizējo vērtību, ja tas jau pastāv. Tas izveidos jaunu XML failu vārdnīcu pamatā. Ja bija jauna pievienotā vērtība, jaunas XML fails tiek saglabāts. Visbeidzot, tiek atgriezta XML.
Lapu var pārbaudīt, atverot to jebkurā web pārlūkprogrammā.
Dati tiek nosūtīti, ielādējot ASPX lapu un iekļaujot nosaukumu un vērtību.
Piemēram:
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
Dati būs veikalu XML failu, kas izskatās šādi:
<Data>
<HighScore>10000</HighScore>
<PlayerName>Zara</PlayerName>
<Location>France</Location>
</Data>
Šis ir piemērs tam, kā nosūtīt datus uz ASPX lapu 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);
}
}
Dati tiek saņemti, vienkārši iekraušana ASPX failā.
Piemēram:
http://www.MyWebServer.com/XMLDatabase.aspx
Šis ir piemērs tam, kā iegūt datus no ASPX lapas 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!!!");
}
}
Vairāku ierakstu datu bāzu
Sarežģītākas datu bāzē saglabā ierakstu sarakstu. Katrs ieraksts satur vērtību sarakstu. Katrai vērtībai ir nosaukums.
Piemēram:
1. ierakstu:
FirstName=Andrew
Age=23
2. ierakstu:
FirstName=Andrea
Age=42
XML datu bāzes tipam efektīvi darbosies līdz 100 ierakstiem. Lielāki datu bāzēm būtu nepieciešams vai nu vairākas XML failus vai pievienota pareizai datu bāzei, piemēram, SQL.
Izveidot citu ASPX failā jūsu web serverī, ko sauc par XMLDatabase2.aspx. Izmantojiet šo kodu.
<%@ 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());
%>
Šī servera ASPX lapu ir daudz sarežģītāka. Atkal, tas apstrādā XML failu manipulācijas.
Ja XML fails eksistē, tad ASPX ielādē XML datu vārdnīcu. Tad to pārbauda, ja ir saņemtas jaunas vērtības. Ja jaunu vērtību un indeksu, to pievienot ierakstu vārdnīcā, atjaunināt pašreizējo vērtību, ja tas jau pastāv. Tas izveidos jaunu XML failu vārdnīcu pamatā. Ja bija jauna pievienotā vērtība, jaunas XML fails tiek saglabāts. Visbeidzot, tiek atgriezta XML.
Lapu var pārbaudīt, atverot to jebkurā web pārlūkprogrammā.
Dati tiek nosūtīti, ielādējot ASPX lapu un tajā skaitā indekss, nosaukums un vērtības.
Piemēram:
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
Dati būs veikalu XML failu, kas izskatās šādi:
<Data>
<Record Index="1">
<FirstName>Andrew</FirstName>
<Age>23</Age>
</Record>
<Record Index="2">
<FirstName>Andrea</FirstName>
<Age>42</Age>
</Record>
</Data>
Šis ir piemērs tam, kā nosūtīt datus uz ASPX lapu 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);
}
}
Dati tiek saņemti, vienkārši iekraušana ASPX failā.
Piemēram:
http://www.MyWebServer.com/XMLDatabase.aspx
Šis ir piemērs tam, kā iegūt datus no ASPX lapas 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!!!");
}
}
Šī dokumentācija tika tulkota no angļu valodā, izmantojot online translator. Atvainojamies, ja atrodat kļūdas. Ja jūs vēlaties, lai palīdzētu mums veikt labojumus. Tur ir tulkojumu redaktors Hippani Animator (izvēlnē Palīdzība). Mēs dodam no bezmaksas licences atslēgas, lai ikviens, kurš novērš vairāk nekā 100 frāzes. Lūdzu, sazinieties ar mums, lai saņemtu sīkāku informāciju.