Avatar billede blahblah Nybegynder
04. oktober 2002 - 21:52 Der er 6 kommentarer og
1 løsning

basale XML færdigheder

Jeg sidder og er gået i gang med at sætte mig ind i XML sammen med ASP.NET
Jeg har fundet mange artikler som viser alle mulige smarte ting man kan med XML, men desværre ingen som gennemgår de basale ting.

Når jeg siger 'de basale ting' tænker jeg på fx en gæstebog:

--------------------------------------
Lad os sige jeg har en XML fil som ser sådan her ud:

<gaestebog>
<person id="1">
    <navn>Linus</navn>
    <email vis="ja">Linus@Linux.org</email>
    <tekst>Sikke en fin gæstebog du har :)</tekst>
</person>
<person id="2">
    <navn>Bill</navn>
    <email vis="nix">Bill@microsoft.com</email>
    <tekst>Jeg kan kun være enig med Linus</tekst>
</person>
</gaestebog>

Hvordan kan jeg så lave en gæstebog ud af den ?

dvs. hvordan udtrækker jeg 'navn', 'email', og 'tekst' ud af den ?
Hvordan sørger jeg for at e-mailen kun bliver vist hvis 'vis=ja' ?

og hvordan indsætter jeg en ny person ?
------------------------------------

er der nogen som kender nogle artikler som gennemgår følgende eller som kan forklare mig ?
Avatar billede brynil Nybegynder
05. oktober 2002 - 00:15 #1
Der er flere spm på eksperten hvor du kan stykke dine scripts sammen.

Med en aspx side som denne, binder du dine data (xml-fil) til et dataset. Derfra behandler du data, som var det fra enhver anden form for kilde, fx fra database.

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script language="VB" runat="server">
  Sub Page_Load(Sender As Object, E As EventArgs)
    Dim objDataSet    As New DataSet()
    objDataSet.ReadXml(Server.MapPath("Employees.xml"))
    dgEmployees.DataSource = objDataSet.Tables(0).DefaultView
    dgEmployees.DataBind()
  End Sub
</script>
<html>
  <body>
  <asp:DataGrid id="dgEmployees" runat="server" />
  </body>
</html>

xml-filen ser sådan ud:
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <Employees>
    <FirstName>Nancy</FirstName>
    <LastName>Davolio</LastName>
  </Employees>
....
</NewDataSet>

Andre muligheder er - download WebMatrix fra Ms. Der står der også noget om xml, men er iøvrigt fyldt med gode eksempler du kan anvende, da det som nævnt ikke er så vigtigt hvilken kilde du har fået data fra.
Avatar billede blahblah Nybegynder
05. oktober 2002 - 00:19 #2
okey, men hvordan indsætter jeg, så ny data i min XML fil ?
Avatar billede blahblah Nybegynder
05. oktober 2002 - 00:20 #3
btw. til nødt kan jeg godt forstå en VB, men jeg foretrækker eksempler i C#
Avatar billede brynil Nybegynder
05. oktober 2002 - 00:32 #4
Har ikke noget-men kig på WebMatrix.
Du kan også finde beskrivelser på nettet.
Avatar billede z42cool Nybegynder
06. oktober 2002 - 12:49 #5
Omend at det er muligt at manipulere XML med ADO.Net, så er det efter min mening langt fra det rigtige. ADONet er designet til relationelle data og selvom at eksemplet med en gæstebog kun indeholder relationelle data, så er dette langt fra altid tilfældet med XML.
Der er generelt to standardiserede måder at behandle et XML dokument på, nemlig DOM og SAX. DOM er et objekt hieraki der er en in-memory repræsentation af et givent XML dokument og SAX er en event drevet model hvor man specificerer givne handlinger som response på læsningen af bestemte noder. Jeg har ikke nogen personlige erfaringer med SAX og jeg er ikke sikker på at frameworket indeholder en implementering. Der er derimod en glimrende implementering af DOM og den er dejligt nem at arbejde med.

XmlDocument doc = new XmlDocument();
doc.Load("guestbook.xml");

//Udvælg alle level 1 person noder
XmlNodeList nodelist = doc.DocumentElement.SelectNodes("/gaestebog/person");
XmlNode navn, email, tekst;
foreach (XmlNode node in nodelist)
{
  navn = node.SelectSingleNode("navn");
  email = node.SelectSingleNode("email");
  tekst = node.SelectSingleNode("tekst");
  Response.Write("Person (id:" + node.Attributes.GetNamedItem("id").Value + ")");
  Response.Write("Navn: " + navn.Value);
  if (email.Attributes.GetNamedItem("vis").Value == "ja")
    Response.Write("Email: " + email.value);
  Response.write("Tekst: " + tekst.value);
}
Avatar billede z42cool Nybegynder
06. oktober 2002 - 12:52 #6
Skal du sætte en node ind kan du f.eks. gøre som følger:

XmlDocument doc = new XmlDocument();
doc.Load("guestbook.xml");

XmlNode newNode = doc.CreateElement("person");
newNode.SetAttribute("id", "007");

XmlNode childNode = doc.CreateElement("navn");
childNode.Value = "Z42Cool";
newNode.AppendChild(childNode);

XmlNode childNode = doc.CreateElement("email");
childNode.SetAttribute("vis", "nej");
childNode.Value = "Z42Cool@ruler.of.the.world";
newNode.AppendChild(childNode);

XmlNode childNode = doc.CreateElement("tekst");
childNode.Value = "Hello world!";
newNode.AppendChild(childNode);

doc.DocumentElement.AppendChild(newNode);
Avatar billede z42cool Nybegynder
06. oktober 2002 - 12:54 #7
Som du kan se (håber jeg) er DOM en naturlig måde at behandle data der er opbygget omkring en træstruktur (hvilket XML jo er :-)). Læs meget mere om .Net implementeringen af DOM her:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconxmldocumentobjectmodeldom.asp
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester