6237 Xml

From Teknologisk videncenter
Jump to: navigation, search

XML

XML er et standard format som ofte benyttes til at overføre data fra et program til et andet.
I eksemplet herunder vises en PCDatabase indeholdende to elementer hver med oplysning om No,Bruger og operativsystem.
PCDatabase er det der kaldes root, og en XML fil må kun indeholde et root element.
Bemærk at PC No er indsat som en attribut, mens Bruger og Os er value elementer.


<?xml version="1.0" encoding="utf-8"?>
<PCdatabase>
  <PC No="1">
    <Bruger>Hans</Bruger>
    <Os>Vista</Os>
  </PC>
  <PC No="2">
    <Bruger>Jens</Bruger>
    <Os>Win7</Os>
  </PC>
</PCdatabase>


.NET har færdige pakker til håndtering af XML filer. Her ses programmet som er anvendt til at skrvive ovenstående XML file.


String xmlFileName = ("output.xml");

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.NewLineOnAttributes = false;

//Et XML document skal have et og kun et root element. Her er det PCdatabase
XmlWriter xml = XmlWriter.Create(xmlFileName, settings);
xml.WriteStartElement("PCdatabase");

//Tilføj PC No1
xml.WriteStartElement("PC");
xml.WriteAttributeString("No", "1");
xml.WriteStartElement("Bruger");
xml.WriteValue("Hans");
xml.WriteEndElement();
xml.WriteStartElement("Os");
xml.WriteValue("Vista");
xml.WriteEndElement();
xml.WriteEndElement();

//Tilføj PC No2
xml.WriteStartElement("PC");
xml.WriteAttributeString("No", "2");
xml.WriteStartElement("Bruger");
xml.WriteValue("Jens");
xml.WriteEndElement();
xml.WriteStartElement("Os");
xml.WriteValue("Win7");
xml.WriteEndElement();
xml.WriteEndElement();

xml.WriteEndElement();
xml.Close();


Læsning foregår i to step. Først en del som åbner filen og finder de to PC elementer.


String xmlFileName = ("output.xml");
StreamReader inFile = new StreamReader(xmlFileName);
XmlReader xml = XmlReader.Create(inFile);

while (xml.Read())
{
	if (xml.NodeType == XmlNodeType.Element)
	{
		switch (xml.Name)
		{
			case "PC":
				{
					XmlReader x = xml.ReadSubtree();
					//Her kaldes en metode som læser en PC
					readPc(x);
					break;
				}
			default:

				break;
		}
	}
}
xml.Close();


Dernæst koden som læser en enkelt PC.


public static void readPc(XmlReader xml)
{
	String no;
	String bruger;
	String os;

	while (xml.Read())
	{
		if (xml.NodeType == XmlNodeType.Element)
		{
			switch (xml.Name)
			{
				case "PC":
					{
						no = xml.GetAttribute("No");
						System.Console.WriteLine("PC No:{0}", no);
						break;
					}
				case "Bruger":
					{
						xml.Read();
						bruger = xml.Value;
						System.Console.WriteLine("Bruger:{0}", bruger);
						break;
					}
				case "Os":
					{
						xml.Read();
						os = xml.Value;
						System.Console.WriteLine("Os:{0}", os);
						break;
					}
				default:

					break;
			}
		}
	}
}


Opret et nyt console projekt og afprøv de to viste eksempler.