5.1 Anzeigen der Struktur eines XML- Dokuments in einem TreeView- Steuerelement

Größe: px
Ab Seite anzeigen:

Download "5.1 Anzeigen der Struktur eines XML- Dokuments in einem TreeView- Steuerelement"

Transkript

1 5 XML Anzeigen der Struktur eines XML-Dokuments in einem TreeView- Steuerelement Strukturknoten in ein XML-Dokument einfügen Auf schnelle Weise Strukturknoten an ein XML-Dokument anfügen Bestimmte Elemente durch ihren Namen finden XML-Knoten in einem bestimmten XML-Namespace finden Elemente mit einer XPath-Suche finden XML lesen und schreiben, ohne ein gesamtes XML-Dokument in den Speicher zu laden Ein XML-Dokument anhand eines Schemas überprüfen XML-Serialisierung für benutzerdefinierte Objekte verwenden Ein Schema für eine.net-klasse erstellen Eine Klasse aus einem Schema generieren Eine XSL-Transformation durchführen Eine der bemerkenswertesten Aspekte des Microsoft Framework ist seine tiefe Verwurzelung mit XML. Bei vielen.net-anwendungen werden Sie nicht einmal bemerken, dass Sie XML- Technologien verwenden sie werden einfach hinter den Kulissen verwendet, wenn Sie beispielsweise ein Microsoft ADO.NET DataSet serialisieren, einen XML-Web-Dienst aufrufen oder die Anwendungseinstellungen einer Web.config-Konfigurationsdatei lesen. In anderen Fällen wollen Sie aber vielleicht direkt mit dem System.XML-Namespace arbeiten, um XML- Daten zu bearbeiten. Übliche XML-Aufgaben bestehen nicht nur aus dem Parsen einer XML- Datei, sondern machen auch deren Überprüfung auf Basis eines Schemas, die Zuordnung einer XSL-Transformierung, um ein neues Dokument oder ein HTML-Dokument zu erstellen, oder das intelligente Suchen mit XPath erforderlich. Die Rezepte dieses Kapitels behandeln folgende Aspekte: 115

2 b Techniken für das Lesen, das Parsen und die Manipulation von XML-Daten ( Rezepte 5.1, 5.2, 5.3 und 5.7). b Verfahren, um ein XML-Dokument nach bestimmten Strukturknoten zu durchsuchen, entweder durch direkte Namensangabe ( Rezept 5.4), durch den Namespace ( Rezept 5.5) oder durch die Verwendung von XPath ( Rezept 5.6). b Vorgehensweisen, um ein XML-Dokument mit Hilfe eines XML-Schemas zu überprüfen ( Rezept 5.8). b Ansätze zum Serialisieren eines Objektes ins XML-Format ( Rezept 5.9), zum Erstellen eines XML-Schemas für eine Klasse ( Rezept 5.10) und zum Generieren des Source-Codes für eine Klasse basierend auf einem XML-Schema ( Rezept 5.11). b Verfahren zum Transformieren eines XML-Dokumentes in ein anderes Dokument unter Verwendung eines CSLT-Stylesheets ( Rezept 5.12). 5.1 Anzeigen der Struktur eines XML- Dokuments in einem TreeView- Steuerelement Aufgabe Sie möchten die Struktur und den Inhalt eines XML-Dokuments in einer Windows-basierten Anwendung darstellen. Lösung Laden Sie das XML-Dokument mit Hilfe der System.Xml.XmlDocument-Klasse. Erstellen Sie eine ablaufinvariante Methode, die ein einfaches XmlNode-Objekt in ein System.Windows.Forms.TreeNode-Objekt konvertiert, und die Sie anschließend rekursiv aufrufen, um das ganze Dokument zu verarbeiten. Beschreibung Das.NET-Framework bietet Ihnen mehrere unterschiedliche Vorgehensweisen an, XML- Dokumente zu verarbeiten. Für welche Sie sich entscheiden, hängt von der Aufgabe ab, die Sie erledigen müssen. Eine der meist verwendeten Klassen ist XmlDocument, die einer im Speicher abgelegte Repräsentation eines XML-Dokumentes darstellt und dem W3C-Document Object Model (DOM) entspricht. Die XmlDocument-Klasse erlaubt es Ihnen, sich in alle Richtungen durch die Strukturknoten und Zweige zu bewegen, Knoten einzufügen und zu löschen und die Struktur zu verändern. Für genauere Informationen zur DOM-Spezifikation, besuchen Sie bitte die Seite Um die XmlDocument-Klasse zu verwenden, erstellen Sie einfach eine neue Instanz dieser Klasse und rufen anschließend deren Load-Methode auf, der Sie einen Dateinamen, ein Stream-Objekt, ein TextReader-Objekt oder ein XmlReader-Objekt übergeben. Sie können sogar eine URL angeben, die auf ein bestimmtes XML-Dokument zeigt. Die XmlDocument- Instanz wird anschließend als eine Baumstruktur mit entsprechenden Elementen erstellt, oder mit entsprechenden Strukturknoten aus dem Quelldokument gefüllt. Der Einstiegspunkt für das Zugreifen auf diese Strukturknoten ist das Wurzelelement, das durch die XmlDocu- 116 Kapitel 5

3 ment.documentelement-eigenschaft zur Verfügung gestellt wird. DocumentElement ist ein XmlElement-Objekt, das ein XmlNode-Objekt oder mehrere geschachtelte XmlNode-Objekte beinhalten kann, die wiederum weitere XmlNode-Objekte enthalten können, usw. Ein XmlNode-Objekt ist die Hauptzutat einer XML-Datei. Üblicherweise enthalten XML-Strukturknoten Elemente, Attribute, Kommentare und enthaltenen Text. Wenn Sie mit einem XmlNode-Objekt oder einer Klasse hantieren, die von der XmlNode- Klasse abgeleitet ist (wie beispielsweise XmlElement oder XmlAttribute), stehen Ihnen die folgenden, grundlegenden Eigenschaften zur Verfügung: b ChildNodes repräsentiert eine XmlNodeList-Auflistung, die die erste Ebene von verschachtelten Strukturknoten enthält. b Name repräsentiert den Namen eines Strukturknotens. b NodeType liefert einen Member der System.Xml.XmlNodeType-Enumeration zurück, der den Typ des Strukturknotens bezeichnet (element, attribute, text, etc.). b Value stellt den Inhalt des Strukturknotens dar, zum Beispiel Text oder einen CDATA- Knoten. b Attributes stellt Ihnen eine Auflistung aus Node-Objekten zur Verfügung, die die Attribute der jeweiligen Elemente darstellen. b InnerText ermittelt einen String mit dem zusammengesetzten Wert des entsprechenden Strukturknotens und alle verschachtelten Knoten, b InnerXml ermittelt einen String mit dem zusammengesetzten XML-Markup aller verschachtelten Knoten. b OuterXml ermittelt einen String mit dem zusammengesetzten XML-Markup des aktuellen Knotens und alle verschachtelten Knoten. Das folgende Beispiel iteriert durch jedes Element eines XmlDocument-Objektes und verwendet dabei die ChildNodes-Eigenschaft und eine rekursiv aufrufbare Methode. Jeder Knoten wird in einem TreeView-Steuerelement dargestellt und mit einem Text ausgestattet, der entweder den Knoten oder den Inhalt beschreibt. using System; using System.Windows.Forms; using System.Xml; public class XmlTreeDisplay : System.Windows.Forms.Form private System.Windows.Forms.Button cmdload; private System.Windows.Forms.TextBox txtxmlfile; private System.Windows.Forms.TreeView treexml; private System.Windows.Forms.Label lblfile; // Designer-Code ausgelassen private void cmdload_click(object sender, System.EventArgs e) // Baumstruktur löschen. treexml.nodes.clear(); // Das XML-Dokument laden. XmlDocument doc = new XmlDocument(); XML 117

4 try doc.load(txtxmlfile.text); catch (Exception err) MessageBox.Show(err.Message); return; // TreeView aufbauen. ConvertXmlNodeToTreeNode(doc, treexml.nodes); // Alle Strukturknoten erweitern. treexml.nodes[0].expandall(); private void ConvertXmlNodeToTreeNode(XmlNode xmlnode, TreeNodeCollection treenodes) // Einen TreeNode hinzufügen, der den XML-Strukturknoten repräsentiert. TreeNode newtreenode = treenodes.add(xmlnode.name); // Den TreeNode-Text dem Xml-Strukturknoten-Typ und -Inhalt entsprechend anpassen. switch (xmlnode.nodetype) case XmlNodeType.ProcessingInstruction: case XmlNodeType.XmlDeclaration: newtreenode.text = "<?" + xmlnode.name + " " + xmlnode.value + "?>"; break; case XmlNodeType.Element: newtreenode.text = "<" + xmlnode.name + ">"; break; case XmlNodeType.Attribute: newtreenode.text = "ATTRIBUTE: " + xmlnode.name; break; case XmlNodeType.Text: case XmlNodeType.CDATA: newtreenode.text = xmlnode.value; break; case XmlNodeType.Comment: newtreenode.text = "<!--" + xmlnode.value + "-->"; break; // Diese Routine rekursiv für jedes Attribut aufrufen. // (XmlAttribute ist eine abgeleitete Klasse von XmlNode) if (xmlnode.attributes!= null) foreach (XmlAttribute attribute in xmlnode.attributes) ConvertXmlNodeToTreeNode(attribute, newtreenode.nodes); // Diese Routine rekursiv für jeden untergeordneten Strukturknoten aufrufen. // Typischerweise repräsentiert ein solcher Knoten ein eingebettetes Element 118 Kapitel 5

5 // oder den Elementeinhalt. foreach (XmlNode childnode in xmlnode.childnodes) ConvertXmlNodeToTreeNode(childNode, newtreenode.nodes); Als Beispiel zur Ausführung des Codes können Sie die folgende XML-Datei verwenden (die im Beispielcode enthalten und unter dem Namen ProductCatalog.xml zu finden ist). <?xml version="1.0"?> <productcatalog> <catalogname>jones and Jones Katalog 2004</catalogName> <expirydate> </expirydate> <products> <product id="1001"> <productname>gourmet-kaffee</productname> <description>die erlesensten Bohnen aus seltenen Chilenischen Plantagen.</description> <productprice>0.99</productprice> <instock>true</instock> </product> <product id="1002"> <productname>blue China Tee-Kessel</productName> <description>die coole Ergänzung für Tee-Trinker.</description> <productprice>102.99</productprice> <instock>true</instock> </product> </products> </productcatalog> Abbildung 5.1 zeigt Ihnen, wie diese Datei im Formular XmlTreeDisplay ausschaut. Abbildung 5.1: Die dargestellte Struktur eines XML- Dokumentes XML 119

6 5.2 Strukturknoten in ein XML-Dokument einfügen Aufgabe Sie müssen ein XML-Dokument modifizieren, indem Sie neue Daten einfügen, oder Sie möchten ein komplett neues XML-Dokument im Speicher erzeugen. Lösung Erstellen Sie den Strukturknoten mit der entsprechenden XmlDocument-Methode (wie beispielsweise CreateElement, CreateAttribut, CreateNode, usw.). Fügen Sie ihn anschließend mit der entsprechenden XmlNode-Methode (wie beispielsweise InsertAfter, InsertBefore oder AppendChild) in das XML-Dokument ein. Beschreibung Das Einfügen eines Strukturknotens in ein XmlDocument-Objekt ist ein zweistufiger Prozess. Sie müssen zunächst den Knoten erstellen und ihn anschließend an der gewünschten Stelle einfügen. Optional können Sie schließlich XmlDocument.Save aufrufen, damit die Änderungen erhalten bleiben. Um einen Knoten zu erstellen, verwenden Sie eine der XmlDocument-Methoden, die mit dem englischen Wort Create (Erstellen) beginnen; verwenden Sie den entsprechenden Befehl in Abhängigkeit vom Knotentyp. Auf diese Weise stellen Sie sicher, dass der Knoten über denselben Namespace wie der Rest des Dokumentes verfügt. (Alternativ können Sie einen Namespace als zusätzlichen String-Parameter übergeben.) Als nächsten müssen Sie den richtigen Knoten finden und eine seiner Einfügemethoden verwenden, um den Strukturknoten der Baumstruktur hinzuzufügen. Das folgende Beispiel demonstriert diese Technik, indem es programmtechnisch ein neues XML-Dokument erstellt. using System; using System.Xml; public class GenerateXml /// <summary> /// Der Haupteinstiegspunkt der Anwendung. /// </summary> [STAThread] private static void Main(string[] args) // Neues, leeres Dokument erstellen. XmlDocument doc = new XmlDocument(); XmlNode docnode = doc.createxmldeclaration("1.0", "UTF-8", null); doc.appendchild(docnode); // Neues Element erstellen und einfügen. XmlNode productsnode = doc.createelement("products"); doc.appendchild(productsnode); 120 Kapitel 5

7 // Eingebettetes Element (mit einem Attribut) erstellen. XmlNode productnode = doc.createelement("product"); XmlAttribute productattribute = doc.createattribute("id"); productattribute.value = "1001"; productnode.attributes.append(productattribute); productsnode.appendchild(productnode); // Erstellen und hinzufügen der Unterelemente für diesen // Produkt-Strukturknoten (mit den enthaltenen Text-Daten). XmlNode namenode = doc.createelement("productname"); namenode.appendchild(doc.createtextnode("gourmet-kaffee")); productnode.appendchild(namenode); XmlNode pricenode = doc.createelement("productprice"); pricenode.appendchild(doc.createtextnode("0.99")); productnode.appendchild(pricenode); // Einen weiteren Produktknoten erstellen und hinzufügen. productnode = doc.createelement("product"); productattribute = doc.createattribute("id"); productattribute.value = "1002"; productnode.attributes.append(productattribute); productsnode.appendchild(productnode); namenode = doc.createelement("productname"); namenode.appendchild(doc.createtextnode("blue China Tee-Kessel")); productnode.appendchild(namenode); pricenode = doc.createelement("productprice"); pricenode.appendchild(doc.createtextnode("102.99")); productnode.appendchild(pricenode); // Das Dokument speichern (ins Konsolenfenster anstatt in eine Datei). doc.save(console.out); Console.ReadLine(); Das erstellte Dokument sieht folgendermaßen aus: <?xml version="1.0" encoding="ibm850"?> <products> <product id="1001"> <productname>gourmet-kaffee</productname> <productprice>0.99</productprice> </product> <product id="1002"> <productname>blue China Tee-Kessel</productName> <productprice>102.99</productprice> </product> </products> XML 121

8 5.3 Auf schnelle Weise Strukturknoten an ein XML-Dokument anfügen Aufgabe Sie müssen Strukturknoten einem XML-Dokument hinzufügen, ohne dass Sie sehr langen Code dazu entwickeln wollen. Lösung Erstellen Sie eine Helfer-Funktion, die einen Tag-Namen (Markierungsnamen) und den Inhalt als Parameter entgegennimmt, und die das gesamte Element in einem Stück erzeugen kann. Verwenden Sie alternativ die XmlDocument.CloneNode-Methode, um Zweige eines XmlDocument-Objektes zu kopieren. Beschreibung Das Einfügen eines einzelnen Elementes in ein XmlDocument-Objekt macht das Ausarbeiten einiger Codezeilen erforderlich. Es gibt mehrere Ansätze, den Aufwand für das Erstellen dieser Codezeilen zu vermindern. Ein Ansatz besteht darin, eine spezielle Helfer-Klasse zu erstellen, die Methoden auf höherer Ebene zur Verfügung stellt, um Elemente und Attribute zum Dokument hinzuzufügen. So könnten Sie beispielsweise eine AddElement-Methode entwickeln, die ein neues Element erstellt, es einfügt und beliebigen Text dem Element hinzufügt eben die drei Funktionen, die für das Einfügen der meisten Elemente erforderlich sind. Im Folgenden finden Sie ein Beispiel einer solchen Helfer-Klasse: using System; using System.Xml; public class XmlHelper public static XmlNode AddElement(string tagname, string textcontent, XmlNode parent) XmlNode node = parent.ownerdocument.createelement(tagname); parent.appendchild(node); if (textcontent!= null) XmlNode content; content = parent.ownerdocument.createtextnode(textcontent); node.appendchild(content); return node; public static XmlNode AddAttribute(string attributename, string textcontent, XmlNode parent) XmlAttribute attribute; attribute = parent.ownerdocument.createattribute(attributename); attribute.value = textcontent; parent.attributes.append(attribute); 122 Kapitel 5

9 return attribute; Der Code aus Rezept 5.2 kann nun durch die wesentlich einfacher zu handhabende Syntax kompakter werden: using System; using System.Xml; public class GenerateXml /// <summary> /// Der Haupteinsteigspunkt der Anwendung. /// </summary> [STAThread] private static void Main() // Das Basisdokument erstellen. XmlDocument doc = new XmlDocument(); XmlNode docnode = doc.createxmldeclaration("1.0", "UTF-8", null); doc.appendchild(docnode); XmlNode products = doc.createelement("products"); doc.appendchild(products); // Zwei Produkte hinzufügen. XmlNode product = XmlHelper.AddElement("product", null, products); XmlHelper.AddAttribute("id", "1001", product); XmlHelper.AddElement("productName", "Gourmet-Kaffee", product); XmlHelper.AddElement("productPrice", "0.99", product); product = XmlHelper.AddElement("product", null, products); XmlHelper.AddAttribute("id", "1002", product); XmlHelper.AddElement("productName", "Blue China Teekessel", product); XmlHelper.AddElement("productPrice", "102.99", product); // Das Dokument speichern (ins Konsolenfenster anstatt in eine Datei). doc.save(console.out); Console.ReadLine(); Alternativ können Sie Helfer-Methoden wie AddAttribute und AddElement auch als Instanzmethoden einer benutzerdefinierten Klasse implementieren, die Sie von XmlDocument ableiten. Eine weitere Vereinfachungsmöglichkeit, um XML zu generieren, ist, die XmlNode.CloneNode- Methode zu verwenden, um Strukturknoten zu duplizieren. CloneNode nimmt den Parameter deep vom Typ Boolean entgegen. Falls Sie dabei true übergeben, dupliziert CloneNode den gesamten Zweig einschließlich aller eingebetteten Unterzweige. Im Folgenden finden Sie ein Beispiel, das einen neuen Produkte-Knoten erstellt, indem es den ersten Knoten kopiert. XML 123

10 // (Ersten Produkt-Strukturknoten hinzufügen.) // Erstellen eines neuen Elements basierend auf einem existierenden Produkt. product = product.clonenode(true); // Knotendaten modifizieren. product.attributes[0].value = 1002"; product.childnodes[0].childnodes[0].value = Blue China Teekessen"; product.childnodes[1].childnodes[0].value = "; // Neues Element hinzufügen. products.appendchild(product); Beachten Sie in diesem Fall, dass von bestimmten Voraussetzungen ausgegangen wird, was die bereits bestehenden Strukturknoten anbelangt (beispielsweise, dass der erste Unterzweig im Strukturknoten immer den Namen und der zweite Unterzweig stets den Preis darstellt). Falls diese Voraussetzung nicht sichergestellt sein kann, sollten Sie den Strukturknotennamen programmtechnisch untersuchen, bevor Sie die entsprechenden Aktionen einleiten, um zu vermeiden, vielleicht falsche Zweige zu manipulieren. 5.4 Bestimmte Elemente durch ihren Namen finden Aufgabe Sie müssen einen bestimmten Strukturknoten eines XmlDocument-Objekts finden und kennen nur dessen Namen aber nicht dessen Position im Dokument. Lösung Verwenden Sie die XmlDocument.GetElementsByTagName-Methode, die ein komplettes XML-Dokument durchsucht und ein System.Xml.XmlNodeList-Objekt zurückliefert, das alle Treffer enthält. Beschreibung Die XmlDocument-Klasse stellt Ihnen eine komfortable Methode namens GetElementsBy- TagName zur Verfügung, die ein komplettes XML-Dokument nach Strukturknoten durchsucht, die einem übergebbaren Namen entsprechen. Diese Methode liefert eine Auflistung aus XmlNode-Objekten zurück, die den gefundenen Übereinstimmungen entspricht. Der folgende Code demonstriert, wie Sie GetElementsByTagName verwenden, um den Gesamtpreis von Artikeln eines Kataloges zu errechnen, indem Sie alle Elemente namens prodcutprice ermitteln. using System; using System.Xml; public class FindNodesByName [STAThread] private static void Main() // Das Dokument laden. XmlDocument doc = new XmlDocument(); doc.load("productcatalog.xml"); 124 Kapitel 5

11 // Alle Preise ermitteln. XmlNodeList prices = doc.getelementsbytagname("productprice"); decimal totalprice = 0; foreach (XmlNode price in prices) // Den inneren Text des gefundenen Elementes finden: totalprice += Decimal.Parse(price.ChildNodes[0].Value); Console.WriteLine("Gesamt-Katalogpreis: " + totalprice.tostring()); Console.ReadLine(); Sie können auch nach Teilen eines XML-Dokuments suchen, indem Sie die XmlElement.Get- ElementsByTagName-Methode verwenden. Sie durchsucht alle untergeordneten Zweige nach Treffern. Um diese Methode zu verwenden, ermitteln Sie zunächst das XmlNode-Objekt, das einem bestimmten Element entspricht. Sie casten dieses Objekt anschließend in ein XmlElement-Objekt. Das folgende Beispiel zeigt, wie Sie den price-strukturknoten unterhalb des ersten product-elements finden. 5.5 XML-Knoten in einem bestimmten XML- Namespace finden Aufgabe Sie müssen Knoten eines bestimmten URINamespaces unter Verwendung eines XmlDocument-Objektes ermitteln. Lösung Verwenden Sie die überladene Version der XmlDocument.GetElementsByTagName-Methode, die einen URINamespace-Namen als String-Parameter übernimmt. Geben Sie ein Sternchen (*) für den Elementnamen an, falls Sie alle Einträge aufnehmen wollen. Beschreibung Viele XML-Dokumente enthalten Knoten von mehr als nur einem Namespace. So könnte ein XML-Dokument, das beispielsweise einen wissenschaftlichen Artikel repräsentiert, unterschiedliche Markup-Typen zur Kennzeichnung von mathematischen Gleichungen und Vektordiagrammen verwenden oder es könnte ein XML-Dokument für die Speicherung von Kaufvorgängen geben, das Kunden- und Auftragsinformationen sowie Lieferdatensätze zusammenfasst. Auf ähnliche Weise könnte ein XML-Dokument, das Transaktionen im Wiederverkaufsgeschäftsbereich (business-to-business) darstellt, Vorgänge beider Firmen enthalten, die in unterschiedlichen Auszeichnungssprachen erstellt wurden. Eine häufige Anforderung bei der XML-Programmierung ist das Ermitteln von Elementen, die aus bestimmten Namespaces stammen. Sie können diese Aufgabe mit der überladenen Version der XmlDocument.GetElementsByTagName-Methode lösen, die einen Namespace-Namen entgegennimmt. Sie können diese Methode verwenden, um Tags (Markierungen) anhand des Na- XML 125

12 mens zu finden, oder um alle Tags zu ermitteln, indem Sie ein Sternchen als Tag-Namen- Parameter übergeben. Als Beispiel soll das folgende, zusammengesetzte XML-Dokument dienen, das Bestell- und Kundeninformationen enthält, die aus verschiedenen Namespaces stammen ( sowie <?xml version="1.0?> <ord:order xmlns:ord=" xmlns:cli=" <cli:client> <cli:firstname>sally</cli:firstname> <cli:lastname>sergeyeva</cli:lastname> </cli:client> <ord:orderitem itemnumber="3211"/> <ord:orderitem itemnumber="1155"/> </ord:order> Im Folgenden finden Sie eine Konsolenanwendung, die alle Tags im Namespace selektiert: using System; using System.Xml; public class SelectNodesByNamespace [STAThread] private static void Main() // Das Dokument laden XmlDocument doc = new XmlDocument(); doc.load("order.xml"); // Alle Bestellungs-Markierungen ermitteln. XmlNodeList matches = doc.getelementsbytagname("*", " // Alle Informationen anzeigen. Console.WriteLine("Element \tattribute"); Console.WriteLine("******* \t*********"); foreach (XmlNode node in matches) Console.Write(node.Name + "\t"); foreach (XmlAttribute attribute in node.attributes) Console.Write(attribute.Value + " "); Console.WriteLine(); Console.ReadLine(); Die Anwendung produziert folgende Ausgabe: 126 Kapitel 5

13 Element Attribute ******* ********* ord:order ord:orderitem 3211 ord:orderitem Elemente mit einer XPath-Suche finden Aufgabe Sie müssen ein XML-Dokument nach Knoten durchsuchen und möchten erweiterte Suchkriterien verwenden. Sie möchten beispielsweise einen bestimmten Zweig eines XML-Dokumentes nach Knoten durchsuchen, die bestimmte Attribute aufweisen oder eine bestimmte Anzahl untergeordneter Knoten enthalten. Lösung Verwenden Sie zur Suche einen XPath-Ausdruck, indem Sie diesen den Methoden SelectNodes oder SelectSingleNode der XmlDocument-Klasse übergeben. Beschreibung Die XmlNode-Klasse definiert zwei Methoden, mit der Sie XPath-Suchen durchführen können: SelectNode und SelectSingleNode. Diese Methoden verarbeiten alle enthaltenen Unterknoten. Da die XmlDocument-Klasse aus XmlNode abgeleitet ist, können Sie XmlDocument.SelectNodes verwenden, um ein gesamtes Dokument zu durchsuchen. Als Beispiel soll das folgende XML-Dokument dienen, das eine Bestellung von zwei Artikeln widerspiegelt. Dieses Dokument beinhaltet sowohl Text als auch nummerische Daten, untergeordnete Elemente sowie Attribute und stellt damit eine ideale Voraussetzung dar, einfache XPath-Ausdrücke zu testen. <?xml version="1.0"?> <Order id=" "> <Client id="ros "> <Name>Bemerkenswerte Büro-Utensilien</Name> </Client> <Items> <Item id="1001"> <Name>Elektronischer Winkelmesser</Name> <Price>42.99</Price> </Item> <Item id="1002"> <Name>Unsichtbare Tinte</Name> <Price>200.25</Price> </Item> </Items> </Order> Die grundlegende XPath-Syntax ähnelt der Notation, die Sie von Ordnerstrukturen her kennen. Beispielsweise verweist der Pfad /Order/Items/Item auf ein <Item>-Element, das innerhalb eines <Items>-Elements eingebettet ist, das sich wiederum im Wurzelelement <Order> XML 127

14 befindet. Dabei handelt es sich um einen absoluten Pfad. Das folgende Beispiel verwendet einen absoluten XPath-Pfad, um den Namen jedes Elements einer Bestellung zu finden: using System; using System.Xml; public class XPathSelectNodes [STAThread] private static void Main() // Das Dokument laden. XmlDocument doc = new XmlDocument(); doc.load("orders.xml"); // Den Namen jedes Elements ermitteln. // Ein einfachsten kann das mit der GetElementsByTagName-Methode erreicht werden, // da Name-Elemente in Item-Elementen und Client-Elementen verwendet werden, // und darum können beide Typen zurückgeliefert werden. XmlNodeList nodes = doc.selectnodes("/order/items/item/name"); foreach (XmlNode node in nodes) Console.WriteLine(node.InnerText); Console.ReadLine(); Diese Anwendung produziert die folgende Ausgabe: Elektronischer Winkelmesser Unsichtbare Tinte XPath bietet Ihnen eine reichhaltige und leistungsstarke Suchsyntax, und es ist schlicht nicht möglich, all ihre Variationen in einem kleinen Rezept vorzustellen. Dennoch zeigt Ihnen Tabelle 5.1 einige der Hauptzutaten von komplexeren XPath-Ausdrücken, und sie enthält auch Beispiele, die Ihnen demonstrieren, wie sie mit dem Bestelldokument des Beispiels anzuwenden sind. Für eine detailliertere Referenz besuchen Sie bitte auch die Seite /TR/xpath, die Ihnen ausführliche Informationen zum Thema liefert. Ausdruck Beschreibung / Startet einen absoluten Pfad, der vom Wurzelknoten selektiert. /Order/Items/Item selektiert alle Item-Elemente, die Unterelemente eines Items-Elements sind, der selbst wiederum einen Untereintrag des Wurzel-Order-Elements bildet. // Startet einen relativen Pfad, der Knoten an jedem Platz selektieren kann. //Item/Name selektiert alle Name-Elemente, die untergeordnete Elemente eines Item-Elements sind, ganz gleich, an welcher Stelle im Dokument sie Selektiert ein Attribut eines Knotens. /Order/@id selektiert das Attribut namens id aus dem Wurzel-Order-Element. 128 Kapitel 5

15 Ausdruck Beschreibung * Selektiert jedes Element im Pfad. /Order/* selektiert sowohl die Items- als auch die Client-Knoten, da beide dem Wurzel-Order- Element untergeordnet sind. Kombiniert mehrere Pfade. /Order/Items/Item/Name Order/Client/Client/Name selektiert die Name-Knoten, die ein Client- Element beschreiben sowie die Name-Knoten, die ein Item-Element beschreiben.. Bezieht sich auf den aktuellen (Standard-) Knoten Falls es sich beim aktuellen Knoten um ein Order-Element handelt, bezieht sich der Ausdruck./Items auf die entsprechenden Item-Elemente dieses Order-Elements... Bezieht sich auf den übergeordneten Knoten. //Name/.. selektiert jedes Element, das ein übergeordnetes zum Name-Element bildet Clientund Item-Elemente eingeschlossen. [ ] Definiert Selektionskriterien, die enthaltene Knoten oder Attributwerte testen können. /Order[@id=" "] selektiert die Order-Elemente mit dem angegebenen Attributwert. /Order/Items/Item[Price > 50] selektiert Produkte über 50 Euro. /Order/Items/Item[Price > 50 and Name="Laser-Drucker"] selektiert Produkte, auf die zwei Kriterien zutreffen. starts-with position count Diese Funktion ermittelt Element basierend auf den Anfangszeichen des angegebenen Textes. /Order/Items/Item[starts-with(Name, C )] findet alle Item-Element, die über ein Name-Element verfügen, dessen Namen mit dem Buchstaben C beginnt. Diese Funktion ermittelt Elemente auf Grund ihrer Position. /Order/Items/Item[position ()=2] selektiert das zweite Item-Element des Dokuments. Diese Funktion zählt Elemente. Sie bestimmen den Namen des untergeordneten Elements, das gezählt werden soll oder ein Sternchen (*) für alle vorhandenen untergeordneten Elemente. /Order/Items/Item[count(Price) = 1] ermittelt Item-Elemente, die über exakt ein untergeordnetes Price-Element verfügen. Tabelle 5.1: XPath-Ausdruckssyntax HINWEIS: XPath-Ausdrücke und alle Element- und Attributnamen, die Sie innerhalb dieser verwenden, unterscheiden immer die Groß-/Kleinschreibung, da für XML selbst ebenfalls die Unterscheidung der Groß-/Kleinschreibung definiert ist. 5.7 XML lesen und schreiben, ohne ein gesamtes XML-Dokument in den Speicher zu laden Aufgabe Sie möchten ein XML-Dokument aus einem Stream lesen oder in einen Stream schreiben. Aber Sie möchten Knoten nur nacheinander verarbeiten, anstatt das gesamte Dokument mit XmlDocument zunächst vollständig in den Speicher zu laden. XML 129

16 Lösung Um XML zu schreiben, erstellen Sie ein XmlTextWriter-Objekt, das den Stream umschließt und verwenden anschließend die Write-Methoden (wie beispielsweise WriteStartElement und WriteEndElement). Um XML zu lesen, erstellen Sie ein XmlTextReader-Objekt, das einen Stream umschließt und rufen anschließend Read auf, um durch die Strukturknoten zu iterieren. Beschreibung Die XmlTextWriter und XmlTextReader-Klassen lesen bzw. schreiben XML direkt aus einem Stream und Knoten für Knoten. Diese Klassen stellen nicht die gleichen Funktionalitäten wie die XmlDocument-Klasse zur Verfügung, um durch ein XML-Dokument zu navigieren oder es zu manipulieren, aber sie bieten dafür eine höhere Verarbeitungsgeschwindigkeit und weniger Speicherbedarf, was gerade dann von Vorteil ist, wenn Sie umfangreiche XML-Dokumente verarbeiten müssen. Um XML in einen beliebigen Stream zu schreiben, verwenden Sie die XmlTextWriter-Klasse. Sie stellt Write-Methoden zur Verfügung, die Knoten einzeln nacheinander schreiben. Methoden dafür sind: b WriteStartDocument, mit deren Hilfe Sie den Dokument-Prolog schreiben lassen können, sowie WriteEndDocument, die jedwede noch geöffneten Elemente am Ende des Dokumentes schließt. b WriteStartElement, die ein Öffnungs-Tag für das Element schreibt, das Sie angeben. Sie können anschließend mehrere eingebettete Elemente innerhalb dieses Elements hinzufügen oder WriteEndElement aufrufen, um das Schließ-Tag zu schreiben. b WriteElementString, die ein vollständiges Element schreibt einschließlich Öffnungs-Tag, Schließ-Tag sowie dem Textinhalt. b WriteAttributString, die ein vollständiges Attribut für das nächste geöffnete Element schreibt einschließlich Namen und Wert. Die Verwendung dieser Methoden reduziert in der Regel die Codegröße im Gegensatz zur manuellen Erstellung eines XmlDocument wie es in der Rezepten 5.2 und 5.3 vorgestellt wurde. Um XML zu lesen, verwenden Sie die Read-Methode der XmlTextReader-Klasse. Diese Methode bewegt die Leseposition zum nächsten Knoten und liefert dann true zurück. Falls keine weiteren Knoten mehr gefunden werden können, liefert die Funktion false zurück. Sie können Informationen über den aktuell verarbeiteten Knoten über die XmlTextReader-Eigenschaften abrufen, einschließlich seines Namens (Name), Wertes (Value) und Knotentyps (NodeType). Um festzustellen, ob ein Element über Attribute verfügt, müssen Sie explizit die HasAttributes- Eigenschaft abfragen und anschließend die GetAttribute-Methode verwenden, um die Attribute entweder durch den Namen oder einen Index zu ermitteln. Die XmlTextReader-Klasse kann nur auf einen Knoten zu einem Zeitpunkt zugreifen, und mit ihr sind auch keine Rückwärtsbewegungen oder der direkte Zugriff auf einen beliebigen Knoten im Dokument möglich. Aus diesem Grund bietet sie nicht die gleiche Flexibilität wie die XmlDocument-Klasse. 130 Kapitel 5

17 Die folgende Konsolenanwendung schreibt und liest ein einfaches XML-Dokument unter Verwendung der XmlTextWriter- und der XmlTextReader-Klassen. Es handelt sich dabei um das gleiche Dokument, das in Rezepten 5.2 und 5.3 mithilfe der XmlDocument-Klasse erstellt wurde. using System; using System.Xml; using System.IO; using System.Text; public class ReadWriteXml private static void Main() // Datei und Writer-Objekt erstellen. FileStream fs = new FileStream("products.xml", FileMode.Create); XmlTextWriter w = new XmlTextWriter(fs, Encoding.UTF8); // Dokument beginnen. w.writestartdocument(); w.writestartelement("products"); // Produkt schreiben. w.writestartelement("product"); w.writeattributestring("id", "1001"); w.writeelementstring("productname", "Gourmet-Kaffee"); w.writeelementstring("productprice", "0.99"); w.writeendelement(); // Weiteres Produkt schreiben. w.writestartelement("product"); w.writeattributestring("id", "1002"); w.writeelementstring("productname", "Blue China Teekessel"); w.writeelementstring("productprice", "102.99"); w.writeendelement(); // Dokument abschließen. w.writeendelement(); w.writeenddocument(); w.flush(); fs.close(); Console.WriteLine("Document erstellen. " + "Drucken Sie Return, um das Dokument zu lesen."); Console.ReadLine(); fs = new FileStream("products.xml", FileMode.Open); XmlTextReader r = new XmlTextReader(fs); // Alle Strukturknoten lesen. while (r.read()) if (r.nodetype == XmlNodeType.Element) Console.WriteLine(); XML 131

18 Console.WriteLine("<" + r.name + ">"); if (r.hasattributes) for (int i = 0; i < r.attributecount; i++) Console.WriteLine("\tATTRIBUT: " + r.getattribute(i)); else if (r.nodetype == XmlNodeType.Text) Console.WriteLine("\tWert: " + r.value); Console.ReadLine(); 5.8 Ein XML-Dokument anhand eines Schemas überprüfen Aufgabe Sie möchten den Inhalt eines XML-Dokuments überprüfen, indem Sie sicherstellen, dass es zu einem XML-Schema konform ist. Lösung Verwenden Sie die System.Xml.XmlValidatingReader-Klasse. Erstellen Sie eine Instanz, laden Sie ein Schema in die XmlValidatingReader.Schemas-Auflistung, und bewegen Sie sich anschließend knotenweise durch das Dokument, während Sie dabei die Methode XmlValidatingReader.Read aufrufen und Überprüfungsausnahmen abfangen. Um alle Fehler in einem Dokument zu finden, ohne Ausnahmen behandeln zu müssen, verarbeiten Sie das Validation- EventHandler-Ereignis. Beschreibung Ein XML-Schema definiert Regeln, denen ein bestimmtes XML-Dokument folgen muss. Dieses Schema beinhaltet Regeln, die b die Elemente und Attribute definieren, die in einem Dokument auftauchen dürfen. b die Datentypen für Elemente und Attribute definieren. b die Struktur eines Dokumentes festlegen, einschließlich welche Elemente als Unterelemente anderer fungieren dürfen. b die Reihenfolge und Anzahl von Unterelementen festlegen, die in einem Dokument vorkommen dürfen. b bestimmen, ob Elemente leer sein müssen, Text enthalten können oder über feste Werte verfügen müssen. 132 Kapitel 5

19 Ausführliche Beschreibungen von XML-Schemadokumenten würden den Rahmen dieses Kapitels sprengen aber bereits ein einfaches Beispiel kann viel zum Verständnis des Sachverhaltes beitragen. Dieses Rezept verwenden den bereits aus Rezept 5.1 bekannten Produktkatalog. Auf der grundlegendsten Ebene definiert eine XML-Schemadefinition (XSD) die Elemente, die in einem XML-Dokument vorkommen dürfen. XSD-Dokumente sind selbst auch in XML verfasst, und Sie verwenden ein spezielles, vordefiniertes Element (namens <element>) im XSD- Dokument, um jedes Element zu kennzeichnen, das im Zieldokument benötigt wird. Das type- Attribut bestimmt dabei den Datentyp. Im Folgenden finden Sie je ein Beispiel für einen Produktnamen <xsd:element name="productname type="xsd:string /> und für einen Produktpreis: <xsd:element name="productprice type="xsd:decimal /> Die Definition der grundlegenden Schemadatentypen finden Sie unter /TR/xmlschema-2. Sie lehnen sich nah an die.net-datentypen an und umfassen string, int, long. decimal, float, datetime, boolean sowie base64binary um nur ein paar der am häufigsten verwendeten Datentypen zu nennen. Sowohl productname als auch productprice sind einfache Typen, da sie nur Textdaten beinhalten. Elemente, die weitere Elemente einbetten, werden als komplexe Typen bezeichnet. Sie können Sie mit dem <sequence>-tag einbetten, falls die Reihenfolge von Bedeutung ist, oder Sie verwenden das <all>-tag, falls die Reihenfolge nicht von Bedeutung ist. Im Folgenden finden Sie eine Möglichkeit, wie Sie das <product>-element des Produktkatalogs modellieren können. Beachten Sie, dass Attribute grundsätzlich nach Elementen definiert werden, und dass Sie nicht mit <sequence> oder <all> gruppiert sind, da die Reihenfolge dabei keine Rolle spielt. <xsd:complextype name="product"> <xsd:sequence> <xsd:element name="productname type="xsd:string"/> <xsd:element name="productprice type="xsd:decimal"/> <xsd:element name="instock type="xsd:boolean"/> </xsd:sequence> <xsd:attribute name="id type="xsd:integer"/> </xsd:complextype> Standardmäßig kann ein gelistetes Element genau einmal im Dokument vorkommen. Sie können dieses Verhalten jedoch einstellen, indem Sie die maxoccurs und minoccurs-attribute entsprechend konfigurieren. Im Folgenden finden Sie ein Beispiel, das ein unbegrenztes Vorkommen von Produkten im Produktkatalog ermöglicht: <xsd:element name="product type="product maxoccurs="unbounded /> Das vollständige Schema für den XML-Produktkatalog gestaltet sich folgendermaßen: <?xml version="1.0?> <xsd:schema xmlns:xsd=" <!-- Define the complex type product. --> <xsd:complextype name="product"> <xsd:sequence> <xsd:element name="productname type="xsd:string"/> XML 133

20 <xsd:element name="productprice type="xsd:decimal"/> <xsd:element name="instock type="xsd:boolean"/> </xsd:sequence> <xsd:attribute name="id type="xsd:integer"/> </xsd:complextype> <!-- This is the structure the document must match. It begins with a productcatalog element that nests other elements. --> <xsd:element name="productcatalog"> <xsd:complextype> <xsd:sequence> <xsd:element name="catalogname type="xsd:string"/> <xsd:element name="expirydate type="xsd:date"/> <xsd:element name="products"> <xsd:complextype> <xsd:sequence> <xsd:element name="product type="product" maxoccurs="unbounded /> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema> Die XmlValidatingReader-Klasse erzwingt die Beachtung dieser Schemaregeln stellt dabei also sicher, dass das Dokument gültig ist und sie überprüft ebenfalls, dass das XML- Dokument sauber aufgebaut ist (also keine ungültigen Zeichen oder fehlende Schließ-Tags enthält, etc.). Um ein Dokument zu überprüfen, lesen sie seine Knoten nacheinander, indem Sie die XmlValidatingReader.Read-Methode verwenden. Falls ein Fehler gefunden wird, löst die XmlValidatingReader-Klasse das ValidationEventHandler-Ereignis aus und übergibt erforderliche Fehlerinformationen. Falls Sie es wünschen, können Sie dieses Ereignis verarbeiten und die Dokumentüberprüfung fortsetzen, um weitere Fehler zu finden. Falls Sie das Ereignis jedoch nicht behandeln, wird zum Zeitpunkt des Auftretens des ersten Fehlers eine XmlException-Ausnahme ausgelöst, und die Verarbeitung wird anschließend abgebrochen. Um zu überprüfen, ob ein Dokument sauber aufgebaut ist, verwenden Sie XmlValidatingReader ohne die Angabe eines Schemas. Das folgende Beispiel zeigt eine Hilfsklasse, die alle Fehler eines XML-Dokuments darstellt, wenn die ValidateXml-Methode aufgerufen wird. Mögliche Fehler werden im Konsolenfenster dargestellt, und eine finale boolesche Variable wird zurückgegeben, um den Erfolg oder das Fehlschlagen der gesamten Überprüfungsoperation anzuzeigen. using System; using System.Xml; using System.Xml.Schema; public class ConsoleValidator // Auf true setzen, wenn mindestens ein Fehler aufgetreten ist. private bool failed; public bool Failed 134 Kapitel 5

21 get return failed; public bool ValidateXml(string xmlfilename, string schemafilename) // Den Validator (Überprüfer) erstellen. XmlTextReader r = new XmlTextReader(xmlFilename); XmlValidatingReader validator = new XmlValidatingReader(r); validator.validationtype = ValidationType.Schema; // Die Schema-Datei in den Validator laden. XmlSchemaCollection schemas = new XmlSchemaCollection(); schemas.add(null, schemafilename); validator.schemas.add(schemas); // Die Validation-Ereignisbehandlungsprozedur einrichten. validator.validationeventhandler += new ValidationEventHandler(ValidationEventHandler); failed = false; try // Alle XML-Daten lesen. while (validator.read()) catch (XmlException err) // Tritt auf, wenn das XML-Dokument ungültige Zeichen oder // Markierungen enthält, die nicht sauber verschachtelt oder geschlossen wurden. Console.WriteLine("Ein kritischer XML-Fehler ist aufgetreten."); Console.WriteLine(err.Message); failed = true; finally validator.close(); return!failed; private void ValidationEventHandler(object sender, ValidationEventArgs args) failed = true; // Den Überprüfungs-Fehler anzeigen. Console.WriteLine("Validation error: " + args.message); Console.WriteLine(); XML 135

22 Im Folgenden finden Sie das Codelisting, das zeigt, wie Sie die Klasse verwenden: using System; public class ValidateXml [STAThread] private static void Main() ConsoleValidator consolevalidator = new ConsoleValidator(); Console.WriteLine("Validating ProductCatalog.xml."); bool success = consolevalidator.validatexml("productcatalog.xml", "ProductCatalog.xsd"); if (!success) Console.WriteLine("Überprüfung fehlgeschlagen."); else Console.WriteLine("Überprüfung erfolgreich."); Console.ReadLine(); Console.WriteLine("Validating ProductCatalog_Invalid.xml."); success = consolevalidator.validatexml("productcatalog_invalid.xml", "ProductCatalog.xsd"); if (!success) Console.WriteLine("Überprüfung fehlgeschlagen."); else Console.WriteLine("Überprüfung erfolgreich."); Console.ReadLine(); Falls das Dokument gültig ist, erscheinen keine Nachrichten, und die Variable success wird auf true gesetzt. Aber beobachten Sie, was passiert, wenn Sie ein Dokument verwenden, das sich nicht an die Schemaregeln hält, wie beispielsweise die Datei ProductCatalog_Invalid.xml, wie im Folgenden gezeigt: <?xml version="1.0"?> <productcatalog> <catalogname>acme Fall 2003 Catalog</catalogName> <expirydate>jan 1, 2004</expiryDate> <products> <product id="1001"> <productname>magic Ring</productName> <productprice>$342.10</productprice> <instock>true</instock> </product> <product id="1002"> 136 Kapitel 5

23 <productname>flying Carpet</productName> <productprice>982.99</productprice> <instock>yes</instock> </product> </products> </productcatalog> Falls Sie versuchen, dieses Dokument überprüfen zu lassen, wird die success-variable auf false gesetzt und in der Ausgabe wird jeder Fehler dargestellt: Validating ProductCatalog.xml. Validation error: Das expirydate-element hat einen ungültig Wert, abhängig von s einem Datentyp. Fehler in 'file:///d:/writing/currproj/microsoft/csharp-rezepte/ PRGs Original/Kapitel05/Rezept05-08/bin/Debug/ProductCatalog_invalid.xml', '(4 u nd 30)'. Validation error: Das productprice-element hat einen ungültig Wert, abhängig von seinem Datentyp. Fehler in 'file:///d:/writing/currproj/microsoft/csharp-rezept e/prgs Original/Kapitel05/Rezept05-08/bin/Debug/ProductCatalog_invalid.xml', '(9 und 36)'. Validation error: Das instock-element hat einen ungültig Wert, abhängig von sein em Datentyp. Fehler in 'file:///d:/writing/currproj/microsoft/csharp-rezepte/prg s Original/Kapitel05/Rezept05-08/bin/Debug/ProductCatalog_invalid.xml', '(15 und 27)'. Überprüfung fehlgeschlagen. Falls Sie schließlich ein XML-Dokument überprüfen und anschließend verarbeiten wollen, können Sie die XmlValidatingReader-Klasse verwenden, um das Dokument zu scannen und es in ein im Speicher befindliches XmlDokument-Objekt zu laden. Und das funktioniert auf folgende Weise: public class validatexmldocument public static void validate() XmlDocument doc = new XmlDocument(); XmlTextReader r = new XmlTextReader("ProductCatalog.xml"); XmlValidatingReader validator = new XmlValidatingReader(r); // Schema in den Validator (Überprüfer) laden. validator.validationtype = ValidationType.Schema; XmlSchemaCollection schemas = new XmlSchemaCollection(); schemas.add(null, "ProductCatalog.xsd"); validator.schemas.add(schemas); // Dokument laden und gleichzetig validieren. // Behandeln Sie nicht das ValidationEventHandler-Ereignis. Stattdessen // gestatten Sie es, alle Fehler als XmlSchemaException auslösen zu lassen. try doc.load(validator); // (Validierung erfolgreich, wenn das Programm diesen Punkt erreichte.) catch (XmlSchemaException err) // (Validierung fehlgeschlagen, wenn das Programm diesen Punkt erreichte.) XML 137

24 5.9 XML-Serialisierung für benutzerdefinierte Objekte verwenden Aufgabe Sie möchten XML als Serialisierungsformat von zu verarbeitenden Daten verwenden. Aber Sie möchten dazu nicht direkt XML in Ihrem Code verarbeiten stattdessen möchten Sie die Daten mithilfe von benutzerdefinierten Objekten verarbeiten. Lösung Verwenden Sie die System.Xml.Serialization.XmlSerializer-Klasse, um Daten aus Ihrem Objekt in XML und umgekehrt zu übertragen. Sie können Ihren Klassecode auch mit bestimmten Attributen ausstatten, um die erzeugte XML-Darstellung anzupassen. Beschreibung Die XmlSerializer-Klasse erlaubt es Ihnen, Objekte in XML-Daten und umgekehrt zu konvertieren. Dieser Prozess wird nativ von Web-Diensten verwendet und bietet einen konfigurierbaren Mechanismus, der nicht eine einzige Zeile selbst geschriebenen Codes erfordert. Die XmlSerializer-Klasse ist sogar intelligent genug, um Arrays auf korrekte Weise zu erstellen, wenn sie eingebettete Elemente findet. Die einzigen Voraussetzungen für die Benutzung von XmlSerializer sind die Folgenden: b Der XmlSerializer serialisiert ausschließlich Eigenschaften und öffentliche Variablen. b Die Klasse, die Sie serialisieren wollen, muss über einen parameterlosen Standardkonstruktor verfügen. Die XmlSerializer-Klasse verwendet diesen Konstruktor, wenn sie ein neues Objekt während des Serialisierungsvorgangs erstellt. b Alle Klasseneigenschaften müssen lesbar und schreibbar sein. Das ist notwendig, da die XmlSerializer-Klasse den get-zugriffsmodifizierer verwendet, um an die erforderlichen Informationen zu gelangen, sowie den set-zugriffsmodifizierer, um die Daten bei der Deserialisierung wiederherzustellen. HINWEIS: Sie können Ihre Objekte auch in einem auf XML-basierenden Format mithilfe der.net-serialisierung und dem System.Runtime.Serialization.Formatters.Soap.SoapFormatter speichern. In diesem Fall reicht es aus, Ihre Klasse serialisierbar zu machen Sie müssen keinen Standardkonstruktor zur Verfügung stellen oder dafür sorgen, dass alle Eigenschaften lesbar und schreibbar sind. Allerdings gibt Ihnen diese Vorgehensweise keine Kontrolle über das Format, das für die XML-Serialisierung verwendet wird. Um XML-Serialisierung zu verwenden, müssen Sie zunächst Ihre Datenobjekte mit entsprechenden Attributen kennzeichnen, die anzeigen, wie die XML-Zuordnung erfolgen soll. Diese Attribute finden sich im Namespace System.Xml.Serialization, und Sie finden sie im Folgenden beschrieben: b XmlRoot: Definiert den Namen des Wurzelelements der XML-Datei. Standardmäßig verwendet die XmlSerializer-Klasse den Namen der zu serialisierenden Klasse. Dieses Attribut wird der Klassedeklaration zugeordnet. 138 Kapitel 5

25 b XmlElement: Definiert den Elementnamen, der für eine Eigenschaft oder eine öffentliche Variabel verwendet wird. Standardmäßig verwendet die XmlSerializer-Klasse den Namen der Eigenschaft oder den der öffentlichen Variablen. b XmlAttribute: Definiert, dass eine Eigenschaft oder öffentliche Variable als Attribut und nicht als Element serialisiert werden soll und bestimmt darüber hinaus den Attributnamen. b XmlEnum: Definiert den Text, der verwendet werden soll, wenn aufgezählte Werte aus Enummerierungen serialisiert werden. Falls Sie XmlEnum nicht verwenden, nimmt der Xml- Serializer den Namen der Enumerationskonstante. b XmlIgnore: Bestimmt, dass eine Eigenschaft oder eine öffentliche Variable überhaupt nicht serialisiert werden soll. Nehmen wir als Beispiel den Produktkatalog, der das erste Mal in Rezept 5.1 verwendet wurde. Sie können dieses XML-Dokument auch mithilfe der ProductCatalog- und der Product- Objekte darstellen. Im Folgenden finden Sie den Klassencode, den Sie dafür verwenden könnten: using System; using System.Xml.Serialization; [XmlRoot("productCatalog")] public class ProductCatalog [XmlElement("catalogName")] public string CatalogName; // Den date-datentyp verwenden (und den Zeit-Abschnitt im serialisierten XML ignorieren) [XmlElement(ElementName="expiryDate", DataType="date")] public DateTime ExpiryDate; // Namen des Tag festlegen, der alle Produkte speichert, // sowie den Namen des product-tag selbst. [XmlArray("products")] [XmlArrayItem("product")] public Product[] Products; public ProductCatalog() // Standardkonstruktor für die Deserialisierung. public ProductCatalog(string catalogname, DateTime expirydate) this.catalogname = catalogname; this.expirydate = expirydate; public class Product [XmlElement("productName")] public string ProductName; XML 139

26 [XmlElement("productPrice")] public decimal ProductPrice; [XmlElement("inStock")] public bool InStock; [XmlAttributeAttribute(AttributeName="id", DataType="integer")] public string Id; public Product() // Standardkonstruktor für die Deserialisierung. public Product(string productname, decimal productprice) this.productname = productname; this.productprice = productprice; Beachten Sie, dass diese Klassen die XML-Serialisierungsattribute zum Umbenennen der Elementnamen verwenden (unter Verwendung des so genannten»pascal casing«für die Klassen- Member-Namen und des»camel Casing«für die XML-Tag-Namen), Datentypen festlegen, die sich nicht automatisch ergeben, und definieren, wie <product>-elemente in <productcatalog> eingebettet werden. Bei der Verwendung dieser benutzerdefinierten Klassen und des XmlSerializer-Objektes können Sie XML in Objekte und umgekehrt umwandeln. Im Folgenden finden Sie den Code, den Sie benötigen, um ein neues ProductCatalog-Objekt zu erstellen, seinen Inhalt in ein XML- Dokument zu serialisieren, es anschließend aus dem XML-Dokument wieder in ein Objekt zurückzuwandeln und das XML-Dokument schließlich im Konsolenfenster anzuzeigen. using System; using System.Xml; using System.Xml.Serialization; using System.IO; public class SerializeXml private static void Main() // Produktkatalog erstellen. ProductCatalog catalog = new ProductCatalog("New Catalog", DateTime.Now.AddYears(1)); Product[] products = new Product[2]; products[0] = new Product("Product 1", 42.99m); products[1] = new Product("Product 2", m); catalog.products = products; // Bestellung in eine Datei serialisieren. XmlSerializer serializer = new XmlSerializer(typeof(ProductCatalog)); FileStream fs = new FileStream("ProductCatalog.xml", FileMode.Create); serializer.serialize(fs, catalog); fs.close(); catalog = null; 140 Kapitel 5

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

... MathML XHTML RDF

... MathML XHTML RDF RDF in wissenschaftlichen Bibliotheken (LQI KUXQJLQ;0/ Die extensible Markup Language [XML] ist eine Metasprache für die Definition von Markup Sprachen. Sie unterscheidet sich durch ihre Fähigkeit, Markup

Mehr

WPF Steuerelemente Listbox, ComboBox, ListView,

WPF Steuerelemente Listbox, ComboBox, ListView, WPF Steuerelemente Listbox, ComboBox, ListView, Dr. Beatrice Amrhein Überblick Einführung Listen ComboBox Tabellen 2 Einführung 3 Listen- und Tabellen-Elemente Listen und Tabellen-Elemente sind Steuerelemente,

Mehr

4 Aufzählungen und Listen erstellen

4 Aufzählungen und Listen erstellen 4 4 Aufzählungen und Listen erstellen Beim Strukturieren von Dokumenten und Inhalten stellen Listen und Aufzählungen wichtige Werkzeuge dar. Mit ihnen lässt sich so ziemlich alles sortieren, was auf einer

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Access [basics] Rechnen in Berichten. Beispieldatenbank. Datensatzweise berechnen. Berechnung im Textfeld. Reporting in Berichten Rechnen in Berichten

Access [basics] Rechnen in Berichten. Beispieldatenbank. Datensatzweise berechnen. Berechnung im Textfeld. Reporting in Berichten Rechnen in Berichten Berichte bieten die gleichen Möglichkeit zur Berechnung von Werten wie Formulare und noch einige mehr. Im Gegensatz zu Formularen bieten Berichte die Möglichkeit, eine laufende Summe zu bilden oder Berechnungen

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen. Übersicht Struts Forms Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen. Allgemeines Autor: Sascha Wolski http://www.laliluna.de/tutorials.html

Mehr

Delegatesund Ereignisse

Delegatesund Ereignisse Delegatesund Ereignisse «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Definition eines Ereignisses

Mehr

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel 2016. für Mac. amac-buch Verlag

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel 2016. für Mac. amac-buch Verlag Anton Ochsenkühn amac BUCH VERLAG Ecxel 2016 für Mac amac-buch Verlag 2 Word-Dokumentenkatalog! Zudem können unterhalb von Neu noch Zuletzt verwendet eingeblendet werden. Damit hat der Anwender einen sehr

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Jürgen Bayer. MDI-Anwendungen in C#

Jürgen Bayer. MDI-Anwendungen in C# Jürgen Bayer MDI-Anwendungen in C# Inhaltsverzeichnis 1 Grundlagen 2 1.1 Einrichten der Formulare 2 1.2 Öffnen von MDI-Childformularen 3 2 Menüs 4 2.1 Erstellen eines Menüs 4 2.2 Programmierung der Menüpunkte

Mehr

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche etutor Benutzerhandbuch Benutzerhandbuch XQuery Georg Nitsche Version 1.0 Stand März 2006 Versionsverlauf: Version Autor Datum Änderungen 1.0 gn 06.03.2006 Fertigstellung der ersten Version Inhaltsverzeichnis:

Mehr

Melde- und Veröffentlichungsplattform Portal (MVP Portal) Hochladen einer XML-Datei

Melde- und Veröffentlichungsplattform Portal (MVP Portal) Hochladen einer XML-Datei Seite 1 Melde- und Veröffentlichungsplattform Portal (MVP Portal) Hochladen einer XML-Datei Seite 2 1 Inhalt Melde- und Veröffentlichungsplattform Portal... 1 (MVP Portal)... 1 Hochladen einer XML-Datei...

Mehr

Zwischenablage (Bilder, Texte,...)

Zwischenablage (Bilder, Texte,...) Zwischenablage was ist das? Informationen über. die Bedeutung der Windows-Zwischenablage Kopieren und Einfügen mit der Zwischenablage Vermeiden von Fehlern beim Arbeiten mit der Zwischenablage Bei diesen

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

XML-Austauschformat für Sicherheitsdatenblätter

XML-Austauschformat für Sicherheitsdatenblätter XML-Austauschformat für Sicherheitsdatenblätter Version 2.0 / 15. Dezember 2008 www.edas.org 1 XML-Austauschformat für Sicherheitsdatenblätter Der Austausch der Sicherheitsdatenblätter erfolgt als XML-Datei.

Mehr

Datenbanken Kapitel 2

Datenbanken Kapitel 2 Datenbanken Kapitel 2 1 Eine existierende Datenbank öffnen Eine Datenbank, die mit Microsoft Access erschaffen wurde, kann mit dem gleichen Programm auch wieder geladen werden: Die einfachste Methode ist,

Mehr

EMC SourceOne TM für Microsoft SharePoint 7.1 Archivsuche Kurzreferenz

EMC SourceOne TM für Microsoft SharePoint 7.1 Archivsuche Kurzreferenz EMC SourceOne TM für Microsoft SharePoint 7.1 Archivsuche Kurzreferenz Verwenden Sie die Archivsuche zur Suche nach und Wiederherstellung von SharePoint-Inhalten, die in EMC SourceOne archiviert wurden.

Mehr

Flashfragen in ILIAS Test & Assessment. Helmut Schottmüller

Flashfragen in ILIAS Test & Assessment. Helmut Schottmüller Flashfragen in ILIAS Test & Assessment Helmut Schottmüller Flashfragen in ILIAS Test & Assessment Helmut Schottmüller Veröffentlicht Januar 2009 Copyright 2009 Helmut Schottmüller Inhaltsverzeichnis 1.

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Wie kann ich in der Backstage-Ansicht eigene Dokumentationen einbinden?

Wie kann ich in der Backstage-Ansicht eigene Dokumentationen einbinden? Wie kann ich in der Backstage-Ansicht eigene Dokumentationen einbinden? Anforderung Durch die Bearbeitung einer XML-Datei können Sie Ihre eigenen Dokumentationen (z.b. PDF-Dateien, Microsoft Word Dokumente

Mehr

Massenversand Dorfstrasse 143 CH - 8802 Kilchberg Telefon 01 / 716 10 00 Telefax 01 / 716 10 05 info@hp-engineering.com www.hp-engineering.

Massenversand Dorfstrasse 143 CH - 8802 Kilchberg Telefon 01 / 716 10 00 Telefax 01 / 716 10 05 info@hp-engineering.com www.hp-engineering. Massenversand Massenversand Seite 1 Massenversand Seite 2 Inhaltsverzeichnis 1. WICHTIGE INFORMATIONEN ZUR BEDIENUNG VON CUMULUS 4 2. STAMMDATEN FÜR DEN MASSENVERSAND 4 2.1 ALLGEMEINE STAMMDATEN 4 2.2

Mehr

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten. 1 Einleitung Lernziele automatische Antworten bei Abwesenheit senden Einstellungen für automatische Antworten Lerndauer 4 Minuten Seite 1 von 18 2 Antworten bei Abwesenheit senden» Outlook kann während

Mehr

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken. In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access Die Grundlagen der Datenbanken kurspc15 Inhaltsverzeichnis Access... Fehler! Textmarke nicht

Mehr

Lieferschein Dorfstrasse 143 CH - 8802 Kilchberg Telefon 01 / 716 10 00 Telefax 01 / 716 10 05 info@hp-engineering.com www.hp-engineering.

Lieferschein Dorfstrasse 143 CH - 8802 Kilchberg Telefon 01 / 716 10 00 Telefax 01 / 716 10 05 info@hp-engineering.com www.hp-engineering. Lieferschein Lieferscheine Seite 1 Lieferscheine Seite 2 Inhaltsverzeichnis 1. STARTEN DER LIEFERSCHEINE 4 2. ARBEITEN MIT DEN LIEFERSCHEINEN 4 2.1 ERFASSEN EINES NEUEN LIEFERSCHEINS 5 2.1.1 TEXTFELD FÜR

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

2. XML 2.1 XML 1.0 und XML Schema. Jörg Schwenk Lehrstuhl für Netz- und Datensicherheit

2. XML 2.1 XML 1.0 und XML Schema. Jörg Schwenk Lehrstuhl für Netz- und Datensicherheit XML- und Webservice- Sicherheit 2. XML 2.1 XML 1.0 und XML Schema Gliederung 1. XML 1.0 2. XML Namespaces: URI, URL und URN 3. XML Schema Literatur: A. Tanenbaum, Computer Networks. E. R. Harold and W.

Mehr

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version 1.0.0. 23. September 2015 - 1 -

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version 1.0.0. 23. September 2015 - 1 - Matrix42 Use Case - Sicherung und Rücksicherung persönlicher Version 1.0.0 23. September 2015-1 - Inhaltsverzeichnis 1 Einleitung 3 1.1 Beschreibung 3 1.2 Vorbereitung 3 1.3 Ziel 3 2 Use Case 4-2 - 1 Einleitung

Mehr

Enigmail Konfiguration

Enigmail Konfiguration Enigmail Konfiguration 11.06.2006 Steffen.Teubner@Arcor.de Enigmail ist in der Grundkonfiguration so eingestellt, dass alles funktioniert ohne weitere Einstellungen vornehmen zu müssen. Für alle, die es

Mehr

1 Mathematische Grundlagen

1 Mathematische Grundlagen Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Java und XML 2. Java und XML

Java und XML 2. Java und XML Technische Universität Ilmenau Fakultät für Informatik und Automatisierung Institut für Praktische Informatik und Medieninformatik Fachgebiet Telematik Java und XML Hauptseminar Telematik WS 2002/2003

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

Mehr

10.3.1.8 Übung - Konfigurieren einer Windows 7-Firewall

10.3.1.8 Übung - Konfigurieren einer Windows 7-Firewall 5.0 10.3.1.8 Übung - Konfigurieren einer Windows 7-Firewall Drucken Sie diese Übung aus und führen Sie sie durch. In dieser Übung werden Sie erfahren, wie man die Windows 7-Firewall konfiguriert und einige

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Unsere Webapplikation erweitern

Unsere Webapplikation erweitern Unsere Webapplikation erweitern Um die Webapplikation zu benutzen: 1. Starten Sie den Server, indem Sie das Hauptprogramm in der Klasse ImdbServer starten. 2. Laden Sie im Browser die Seite http://localhost:8080/html/index.html.

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

14.4.2016. Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

14.4.2016. Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt 14.4.2016 Technische Hochschule Georg Agricola WORKSHOP TEIL 3 IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt Inhaltsverzeichnis 1. Kurzfassung zur Projekterstellung... 2 2. Morse-Tabelle...

Mehr

teamsync Kurzanleitung

teamsync Kurzanleitung 1 teamsync Kurzanleitung Version 4.0-19. November 2012 2 1 Einleitung Mit teamsync können Sie die Produkte teamspace und projectfacts mit Microsoft Outlook synchronisieren.laden Sie sich teamsync hier

Mehr

Jederzeit Ordnung halten

Jederzeit Ordnung halten Kapitel Jederzeit Ordnung halten 6 auf Ihrem Mac In diesem Buch war bereits einige Male vom Finder die Rede. Dieses Kapitel wird sich nun ausführlich diesem so wichtigen Programm widmen. Sie werden das

Mehr

Hilfe Bearbeitung von Rahmenleistungsverzeichnissen

Hilfe Bearbeitung von Rahmenleistungsverzeichnissen Hilfe Bearbeitung von Rahmenleistungsverzeichnissen Allgemeine Hinweise Inhaltsverzeichnis 1 Allgemeine Hinweise... 3 1.1 Grundlagen...3 1.2 Erstellen und Bearbeiten eines Rahmen-Leistungsverzeichnisses...

Mehr

Handbuch für Redakteure

Handbuch für Redakteure Handbuch für Redakteure Erste Schritte... 1 Artikel erstellen... 2 Artikelinhalt bearbeiten... 3 Artikel bearbeiten... 3 Grunddaten ändern... 5 Weitere Artikeleigenschaften... 5 Der WYSIWYG-Editor... 6

Mehr

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023 Kapitel 33 Der xml-datentyp In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023 995 996 Kapitel 33: Der xml-datentyp Eine der wichtigsten

Mehr

Stammdatenanlage über den Einrichtungsassistenten

Stammdatenanlage über den Einrichtungsassistenten Stammdatenanlage über den Einrichtungsassistenten Schritt für Schritt zur fertig eingerichteten Hotelverwaltung mit dem Einrichtungsassistenten Bitte bereiten Sie sich, bevor Sie starten, mit der Checkliste

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Hinweise zum elektronischen Meldeformular

Hinweise zum elektronischen Meldeformular Paul-Ehrlich-Institut Postfach 63207 Langen Jochen Halbauer Referat Pharmakovigilanz 2 Tel. +49 (0) 6103 77 3114 Fax +49 (0) 6103 77 1268 E-Mail pharmakovigilanz2@pei.de 22.06.2015 Hinweise zum elektronischen

Mehr

Gezielt über Folien hinweg springen

Gezielt über Folien hinweg springen Gezielt über Folien hinweg springen Nehmen wir an, Sie haben eine relativ große Präsentation. Manchmal möchten Sie über Folien hinweg zu anderen Folien springen. Das kann vorkommen, weil Sie den gesamten

Mehr

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien Sie haben von der VR DISKONTBANK GmbH ein signiertes PDF-Dokument (i.d.r. eine Zentralregulierungsliste mit dem Status einer offiziellen Rechnung) erhalten und möchten nun die Signatur verifizieren, um

Mehr

Mediator 9 - Lernprogramm

Mediator 9 - Lernprogramm Mediator 9 - Lernprogramm Ein Lernprogramm mit Mediator erstellen Mediator 9 bietet viele Möglichkeiten, CBT-Module (Computer Based Training = Computerunterstütztes Lernen) zu erstellen, z. B. Drag & Drop

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Pixtacy-Anbindung an CleverReach.de

Pixtacy-Anbindung an CleverReach.de Pixtacy-Anbindung an CleverReach.de Stand: 17. Oktober 2014 2014 Virthos Systems GmbH www.pixtacy.de Einleitung Pixtacy verfügt ab Version 2.5 über eine Schnittstelle zu dem Online-Newslettertool CleverReach.de.

Mehr

Auswahlabfragen mit ACCESS

Auswahlabfragen mit ACCESS Auswahlabfragen mit ACCESS Abfragekriterien und Operatoren Beim Entwerfen von ACCESS-Auswahlabfragen (queries) sind definierte Abfragekriterien bzw. Operatoren zu benutzen. Ein Abfragekriterium ist eine

Mehr

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 Referentin: Dr. Kelly Neudorfer Universität Hohenheim Was wir jetzt besprechen werden ist eine Frage, mit denen viele

Mehr

Erstellen von x-y-diagrammen in OpenOffice.calc

Erstellen von x-y-diagrammen in OpenOffice.calc Erstellen von x-y-diagrammen in OpenOffice.calc In dieser kleinen Anleitung geht es nur darum, aus einer bestehenden Tabelle ein x-y-diagramm zu erzeugen. D.h. es müssen in der Tabelle mindestens zwei

Mehr

Anleitung für die Formularbearbeitung

Anleitung für die Formularbearbeitung 1 Allgemeines Anleitung für die Formularbearbeitung Die hier hinterlegten Formulare sind mit der Version Adobe Acrobat 7.0 erstellt worden und im Adobe-PDF Format angelegt. Damit alle hinterlegten Funktionen

Mehr

So geht s Schritt-für-Schritt-Anleitung

So geht s Schritt-für-Schritt-Anleitung So geht s Schritt-für-Schritt-Anleitung Software WISO Mein Verein Thema Fällige Rechnungen erzeugen und Verbuchung der Zahlungen (Beitragslauf) Version/Datum V 15.00.06.100 Zuerst sind die Voraussetzungen

Mehr

Password Depot für ios

Password Depot für ios Password Depot für ios Inhaltsverzeichnis Erste Schritte... 1 Kennwörterdatei erstellen... 1 Neue Einträge erstellen... 3 Einträge / Gruppen hinzufügen... 3 Einträge / Gruppen kopieren oder verschieben...

Mehr

Info Betrifft: VBA, XML, MSXML-DOM Systemanforderungen: VBA-Host- Anwendung + Internet Explorer 5 oder höher Seitenzahl: 5

Info Betrifft: VBA, XML, MSXML-DOM Systemanforderungen: VBA-Host- Anwendung + Internet Explorer 5 oder höher Seitenzahl: 5 XML-Dateien mittels XML-Dom bearbeiten 1 von Helma Spona XML ist zurzeit in aller Munde. Nicht nur dass es ein wesentlicher Teil der.net-strategie von Microsoft ausmacht, auch im Alltag von Office- und

Mehr

ecaros2 - Accountmanager

ecaros2 - Accountmanager ecaros2 - Accountmanager procar informatik AG 1 Stand: FS 09/2012 Inhaltsverzeichnis 1 Aufruf des ecaros2-accountmanager...3 2 Bedienung Accountmanager...4 procar informatik AG 2 Stand: FS 09/2012 1 Aufruf

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...

Mehr

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt 1. Vorbetrachtungen... 2 2. Die Installation... 2 3. Einstellungen - Erstellung der Verknüpfung... 3 3.1 Benutzung des Konfigurationsprogramms

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005 Das Software Studio Christian Efinger mobilepoi 0.91 Demo Version Anleitung Erstellt am 21. Oktober 2005 Kontakt: Das Software Studio Christian Efinger ce@efinger-online.de Inhalt 1. Einführung... 3 2.

Mehr

Graphic Coding. Klausur. 9. Februar 2007. Kurs A

Graphic Coding. Klausur. 9. Februar 2007. Kurs A Graphic Coding Klausur 9. Februar 2007 Kurs A Name: Matrikelnummer: Hinweise - Es sind keine Hilfsmaterialien erlaubt. (Keine Bücher, Taschenrechner, Handys) - Sie haben zwei Stunden Zeit. - Insgesamt

Mehr

Viele Bilder auf der FA-Homepage

Viele Bilder auf der FA-Homepage Viele Bilder auf der FA-Homepage Standardmäßig lassen sich auf einer FA-Homepage nur 2 Bilder mit zugehörigem Text unterbringen. Sollen es mehr Bilder sein, muss man diese als von einer im Internet

Mehr

Screening for Illustrator. Benutzerhandbuch

Screening for Illustrator. Benutzerhandbuch Benutzerhandbuch Contents 1. Einführung... 3 2. Screening for Illustrator - Übersicht... 4 3. Screening for Illustrator - Arbeitsverfahren... 5 4. Zusätzliche Leistungsmerkmale der InkManager-Tabelle...7

Mehr

Dokumentation zum Inco- FORM

Dokumentation zum Inco- FORM Inco-FORM XML Formulare im WEB-Browser bearbeiten Dokumentation zum Inco- FORM Hinweise zur Installation und zum Einsatz der Anwendung Incontrol Datentechnik GmbH Bochumer Str. 92 D-46262 Dorsten Tel.:

Mehr

Rundung und Casting von Zahlen

Rundung und Casting von Zahlen W E R K S T A T T Rundung und Casting von Zahlen Intrexx 7.0 1. Einleitung In diesem Werkstattbeitrag erfahren Sie, wie Zahlenwerte speziell in Velocity, aber auch in Groovy, gerundet werden können. Für

Mehr

Speicher in der Cloud

Speicher in der Cloud Speicher in der Cloud Kostenbremse, Sicherheitsrisiko oder Basis für die unternehmensweite Kollaboration? von Cornelius Höchel-Winter 2013 ComConsult Research GmbH, Aachen 3 SYNCHRONISATION TEUFELSZEUG

Mehr

Bedienungsanleitung Anlassteilnehmer (Vereinslisten)

Bedienungsanleitung Anlassteilnehmer (Vereinslisten) Bedienungsanleitung Anlassteilnehmer Dieses Programm ist speziell für Vereine entworfen. Es ist lizenzfrei verwendbar und gratis. Das Programm ist mit Excel 2010 erstellt worden und enthält VBA Programmierungen,

Mehr

Kontakte Dorfstrasse 143 CH - 8802 Kilchberg Telefon 01 / 716 10 00 Telefax 01 / 716 10 05 info@hp-engineering.com www.hp-engineering.

Kontakte Dorfstrasse 143 CH - 8802 Kilchberg Telefon 01 / 716 10 00 Telefax 01 / 716 10 05 info@hp-engineering.com www.hp-engineering. Kontakte Kontakte Seite 1 Kontakte Seite 2 Inhaltsverzeichnis 1. ALLGEMEINE INFORMATIONEN ZU DEN KONTAKTEN 4 2. WICHTIGE INFORMATIONEN ZUR BEDIENUNG VON CUMULUS 4 3. STAMMDATEN FÜR DIE KONTAKTE 4 4. ARBEITEN

Mehr

LDAP Konfiguration nach einem Update auf Version 6.3 Version 1.2 Stand: 23. Januar 2012 Copyright MATESO GmbH

LDAP Konfiguration nach einem Update auf Version 6.3 Version 1.2 Stand: 23. Januar 2012 Copyright MATESO GmbH LDAP Konfiguration nach einem Update auf Version 6.3 Version 1.2 Stand: 23. Januar 2012 Copyright MATESO GmbH MATESO GmbH Daimlerstraße 7 86368 Gersthofen www.mateso.de Dieses Dokument beschreibt die Konfiguration

Mehr

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003 Nicht kopieren Der neue Report von: Stefan Ploberger 1. Ausgabe 2003 Herausgeber: Verlag Ploberger & Partner 2003 by: Stefan Ploberger Verlag Ploberger & Partner, Postfach 11 46, D-82065 Baierbrunn Tel.

Mehr

Veröffentlichen von Apps, Arbeitsblättern und Storys. Qlik Sense 2.0.6 Copyright 1993-2015 QlikTech International AB. Alle Rechte vorbehalten.

Veröffentlichen von Apps, Arbeitsblättern und Storys. Qlik Sense 2.0.6 Copyright 1993-2015 QlikTech International AB. Alle Rechte vorbehalten. Veröffentlichen von Apps, Arbeitsblättern und Storys Qlik Sense 2.0.6 Copyright 1993-2015 QlikTech International AB. Alle Rechte vorbehalten. Copyright 1993-2015 QlikTech International AB. Alle Rechte

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

Vorgehensweise bei Lastschriftverfahren

Vorgehensweise bei Lastschriftverfahren Vorgehensweise bei Lastschriftverfahren Voraussetzung hierfür sind nötige Einstellungen im ControlCenter. Sie finden dort unter Punkt 29 die Möglichkeit bis zu drei Banken für das Lastschriftverfahren

Mehr

<script type="text/javascript"> <! <%= page(page.searchsuggestionsscript) %> // > </script>

<script type=text/javascript> <! <%= page(page.searchsuggestionsscript) %> // > </script> 1. Intelligente AutoComplete Funktion für die Volltextsuche 1.1. JQuery einbinden Falls Sie in Ihrem Shop bereits JQuery verwenden, so überprüfen Sie bitte, ob Sie alle notwendigen Dateien eingebunden

Mehr

Step by Step Softwareverteilung unter Novell. von Christian Bartl

Step by Step Softwareverteilung unter Novell. von Christian Bartl Step by Step Softwareverteilung unter Novell von Softwareverteilung unter Novell 1) Starten von einfachen *.EXE-Dateien: Starten sie ConsoleOne Erstellen sie eine eigene Organisationseinheit für ihre Anwendungen

Mehr

Kapitel 3 Bilder farblich verändern - Arbeiten mit Objekten

Kapitel 3 Bilder farblich verändern - Arbeiten mit Objekten Nahezu auf jedem Buchcover, CD Hülle oder auf den Werbeseiten in Zeitschriften und Magazinen, sehen Sie fast ausschließlich Bilder, die mit einem EBV Programm einen sogenannten künstlerischen Touch erhalten

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Erster Schritt: Antrag um Passwort (s. www.ifb.co.at Rubrik -> techn. Richtlinien/Antrag für Zugangsberechtigung)

Erster Schritt: Antrag um Passwort (s. www.ifb.co.at Rubrik -> techn. Richtlinien/Antrag für Zugangsberechtigung) Benutzeranleitung Sehr geehrte Mitglieder und Experten! Diese Benutzeranleitung erklärt die Handhabung und Navigation zu den spezifischen Arbeitsgruppen unter der Rubrik Technische Richtlinien auf der

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014)

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014) Handbuch NAFI Online-Spezial 1. Auflage (Stand: 24.09.2014) Copyright 2016 by NAFI GmbH Unerlaubte Vervielfältigungen sind untersagt! Inhaltsangabe Einleitung... 3 Kundenauswahl... 3 Kunde hinzufügen...

Mehr

Windows 7 Ordner und Dateien in die Taskleiste einfügen

Windows 7 Ordner und Dateien in die Taskleiste einfügen WI.005, Version 1.1 07.04.2015 Kurzanleitung Windows 7 Ordner und Dateien in die Taskleiste einfügen Möchten Sie Ordner oder Dateien direkt in die Taskleiste ablegen, so ist das nur mit einem Umweg möglich,

Mehr

SANDBOXIE konfigurieren

SANDBOXIE konfigurieren SANDBOXIE konfigurieren für Webbrowser und E-Mail-Programme Dies ist eine kurze Anleitung für die grundlegenden folgender Programme: Webbrowser: Internet Explorer, Mozilla Firefox und Opera E-Mail-Programme:

Mehr

Hilfe zum Warenkorb des Elektronischen Katalogs 2007 Version 1.0

Hilfe zum Warenkorb des Elektronischen Katalogs 2007 Version 1.0 Nutzen Sie die vielfältigen Möglichkeiten des Warenkorbes, um Ihre Bestellung/Anfrage an das für Sie zuständige Moeller-Haus zu senden, oder senden Sie den Warenkorb an den Lieferanten Ihrer Moeller-Produkte.

Mehr

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser Dokumentation Black- und Whitelists Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser Inhalt INHALT 1 Kategorie Black- und Whitelists... 2 1.1 Was sind Black- und Whitelists?...

Mehr

ECDL Europäischer Computer Führerschein. Jan Götzelmann. 1. Ausgabe, Juni 2014 ISBN 978-3-86249-544-3

ECDL Europäischer Computer Führerschein. Jan Götzelmann. 1. Ausgabe, Juni 2014 ISBN 978-3-86249-544-3 ECDL Europäischer Computer Führerschein Jan Götzelmann 1. Ausgabe, Juni 2014 Modul Präsentation Advanced (mit Windows 8.1 und PowerPoint 2013) Syllabus 2.0 ISBN 978-3-86249-544-3 ECDLAM6-13-2 3 ECDL -

Mehr

multisign Signatur-Prüfwerkzeug Handbuch Security Networks AG Stand: 24.06.05

multisign Signatur-Prüfwerkzeug Handbuch Security Networks AG Stand: 24.06.05 multisign Signatur-Prüfwerkzeug Handbuch Security Networks AG multisign Signatur Prüfwerkzeug Benutzerhandbuch 1 1 Einleitung Die multisign-produktfamilie ermöglicht die automatische Erstellung qualifizierter

Mehr

Vorgaben und Erläuterungen zu den XML-Schemata im Bahnstromnetz

Vorgaben und Erläuterungen zu den XML-Schemata im Bahnstromnetz Anwendungshandbuch Vorgaben und Erläuterungen zu den XML-Schemata im Bahnstromnetz Version: 1.0 Herausgabedatum: 31.07.2015 Ausgabedatum: 01.11.2015 Autor: DB Energie http://www.dbenergie.de Seite: 1 1.

Mehr

Handbuch für Redakteure

Handbuch für Redakteure Handbuch für Redakteure Erste Schritte... 1 Artikel erstellen... 2 Artikelinhalt bearbeiten... 3 Artikel bearbeiten... 3 Trennen der Druck- und der Online-Version.. 4 Grunddaten ändern... 5 Weitere Artikel-eigenschaften...

Mehr