Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die XML-Serialisierung kann die verschiedensten Formen annehmen, von einfach bis zu komplex. So können Sie z. B. eine Klasse serialisieren, die nur aus öffentlichen Feldern und Eigenschaften besteht, wie unter Einführung in die XML-Serialisierung beschrieben. Die folgenden Beispiele beziehen sich auf verschiedene komplexe Szenarien, einschließlich der Verwendung der XML-Serialisierung zur Generierung eines XML-Streams, der einem bestimmten XSD-Dokument (XML Schema) entspricht.
Serialisieren eines DataSets
Neben dem Serialisieren von Instanzen einer öffentlichen Klasse können auch Instanzen eines DataSet serialisiert werden, wie im folgenden Beispiel gezeigt.
Private Sub SerializeDataSet(filename As String)
Dim ser As XmlSerializer = new XmlSerializer(GetType(DataSet))
' Creates a DataSet; adds a table, column, and ten rows.
Dim ds As DataSet = new DataSet("myDataSet")
Dim t As DataTable = new DataTable("table1")
Dim c As DataColumn = new DataColumn("thing")
t.Columns.Add(c)
ds.Tables.Add(t)
Dim r As DataRow
Dim i As Integer
for i = 0 to 10
r = t.NewRow()
r(0) = "Thing " & i
t.Rows.Add(r)
Next
Dim writer As TextWriter = new StreamWriter(filename)
ser.Serialize(writer, ds)
writer.Close()
End Sub
[C#]
private void SerializeDataSet(string filename){
XmlSerializer ser = new XmlSerializer(typeof(DataSet));
// Creates a DataSet; adds a table, column, and ten rows.
DataSet ds = new DataSet("myDataSet");
DataTable t = new DataTable("table1");
DataColumn c = new DataColumn("thing");
t.Columns.Add(c);
ds.Tables.Add(t);
DataRow r;
for(int i = 0; i<10;i++){
r = t.NewRow();
r[0] = "Thing " + i;
t.Rows.Add(r);
}
TextWriter writer = new StreamWriter(filename);
ser.Serialize(writer, ds);
writer.Close();
}
Serialisieren von XmlElement und XmlNode
Sie können auch Instanzen einer XmlElement-Klasse oder einer XmlNode-Klasse serialisieren, wie das folgende Beispiel zeigt.
private Sub SerializeElement(filename As String)
Dim ser As XmlSerializer = new XmlSerializer(GetType(XmlElement))
Dim myElement As XmlElement = _
new XmlDocument().CreateElement("MyElement", "ns")
myElement.InnerText = "Hello World"
Dim writer As TextWriter = new StreamWriter(filename)
ser.Serialize(writer, myElement)
writer.Close()
End Sub
Private Sub SerializeNode(filename As String)
Dim ser As XmlSerializer = _
new XmlSerializer(GetType(XmlNode))
Dim myNode As XmlNode = new XmlDocument(). _
CreateNode(XmlNodeType.Element, "MyNode", "ns")
myNode.InnerText = "Hello Node"
Dim writer As TextWriter = new StreamWriter(filename)
ser.Serialize(writer, myNode)
writer.Close()
End Sub
[C#]
private void SerializeElement(string filename){
XmlSerializer ser = new XmlSerializer(typeof(XmlElement));
XmlElement myElement=
new XmlDocument().CreateElement("MyElement", "ns");
myElement.InnerText = "Hello World";
TextWriter writer = new StreamWriter(filename);
ser.Serialize(writer, myElement);
writer.Close();
}
private void SerializeNode(string filename){
XmlSerializer ser = new XmlSerializer(typeof(XmlNode));
XmlNode myNode= new XmlDocument().
CreateNode(XmlNodeType.Element, "MyNode", "ns");
myNode.InnerText = "Hello Node";
TextWriter writer = new StreamWriter(filename);
ser.Serialize(writer, myNode);
writer.Close();
}
Serialisieren einer Klasse mit einem Feld, das ein komplexes Objekt zurückgibt
Wenn eine Eigenschaft oder ein Feld ein komplexes Objekt zurückgibt (z. B. ein Array oder eine Klasseninstanz), wird dieses von XmlSerializer in ein Element konvertiert, das innerhalb des XML-Hauptdokuments geschachtelt ist. Die erste Klasse im folgenden Code gibt beispielsweise eine Instanz der zweiten Klasse zurück.
Public Class PurchaseOrder
Public MyAdress As Address
End Class
Public Class Address
Public FirstName As String
End Class
[C#]
public class PurchaseOrder
{
public Address MyAddress;
}
public class Address
{
public string FirstName;
}
Die serialisierte XML-Ausgabe könnte mit dem folgenden Beispiel vergleichbar sein.
<PurchaseOrder>
<Address>
<FirstName>George</FirstName>
</Address>
</PurchaseOrder>
Serialisieren eines Arrays von Objekten
Sie können auch ein Feld serialisieren, das ein Array von Objekten zurückgibt, wie das folgende Beispiel zeigt.
Public Class PurchaseOrder
public ItemsOrders () As Item
End Class
Public Class Item
Public ItemID As String
Public ItemPrice As decimal
End Class
[C#]
public class PurchaseOrder
{
public Item [] ItemsOrders
}
public class Item
{
public string ItemID
public decimal ItemPrice
}
Wenn zwei Elemente angefordert wurden, ist die serialisierte Klasseninstanz möglicherweise mit folgendem Beispiel vergleichbar.
<PurchaseOrder xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Items>
<Item>
<ItemID>aaa111</ItemID>
<ItemPrice>34.22</ItemPrice>
<Item>
<Item>
<ItemID>bbb222</ItemID>
<ItemPrice>2.89</ItemPrice>
<Item>
</Items>
</PurchaseOrder>
Serialisieren einer Klasse, die die ICollection-Schnittstelle implementiert
Sie können Ihre eigenen Auflistungsklassen erstellen, indem Sie die ICollection-Schnittstelle implementieren und Instanzen dieser Klassen über die XmlSerializer-Klasse serialisieren. Beachten Sie, dass bei Implementierung der ICollection-Schnittstelle durch eine Klasse nur die in der Klasse enthaltene Auflistung serialisiert wird. Öffentliche Eigenschaften oder Felder, die zu der Klasse hinzugefügt wurden, werden nicht serialisiert. Die Klasse muss eine Add-Methode und eine Item-Eigenschaft (Indexer in C#) enthalten, damit sie serialisiert werden kann.
Imports System
Imports System.IO
Imports System.Collections
Imports System.Xml.Serialization
Public Class Test
Shared Sub Main()
Dim t As Test= new Test()
t.SerializeCollection("coll.xml")
End Sub
Private Sub SerializeCollection(filename As String)
Dim Emps As Employees = new Employees()
' Note that only the collection is serialized--not the
' CollectionName or any other public property of the class.
Emps.CollectionName = "Employees"
Dim John100 As Employee = new Employee("John", "100xxx")
Emps.Add(John100)
Dim x As XmlSerializer = new XmlSerializer(GetType(Employees))
Dim writer As TextWriter = new StreamWriter(filename)
x.Serialize(writer, Emps)
writer.Close()
End Sub
End Class
Public Class Employees
Implements ICollection
Public CollectionName As String
Private empArray As ArrayList = new ArrayList()
Public ReadOnly Default Overloads _
Property Item(index As Integer) As Employee
get
return CType (empArray(index), Employee)
End Get
End Property
Public Sub CopyTo(a As Array, index As Integer) _
Implements ICollection.CopyTo
empArray.CopyTo(a, index)
End Sub
Public ReadOnly Property Count () As integer Implements _
ICollection.Count
get
Count = empArray.Count
End Get
End Property
Public ReadOnly Property SyncRoot ()As Object _
Implements ICollection.SyncRoot
get
return me
End Get
End Property
Public ReadOnly Property IsSynchronized () As Boolean _
Implements ICollection.IsSynchronized
get
return false
End Get
End Property
Public Function GetEnumerator() As IEnumerator _
Implements IEnumerable.GetEnumerator
return empArray.GetEnumerator()
End Function
Public Function Add(newEmployee As Employee) As Integer
empArray.Add(newEmployee)
return empArray.Count
End Function
End Class
Public Class Employee
Public EmpName As String
Public EmpID As String
Public Sub New ()
End Sub
Public Sub New (newName As String , newID As String )
EmpName = newName
EmpID = newID
End Sub
End Class
[C#]
using System;
using System.IO;
using System.Collections;
using System.Xml.Serialization;
public class Test{
static void Main(){
Test t = new Test();
t.SerializeCollection("coll.xml");
}
private void SerializeCollection(string filename){
Employees Emps = new Employees();
// Note that only the collection is serialized--not the
// CollectionName or any other public property of the class.
Emps.CollectionName = "Employees";
Employee John100 = new Employee("John", "100xxx");
Emps.Add(John100);
XmlSerializer x = new XmlSerializer(typeof(Employees));
TextWriter writer = new StreamWriter(filename);
x.Serialize(writer, Emps);
}
}
public class Employees:ICollection{
public string CollectionName;
private ArrayList empArray = new ArrayList();
public Employee this[int index]{
get{return (Employee) empArray[index];}
}
public void CopyTo(Array a, int index){
empArray.CopyTo(a, index);
}
public int Count{
get{return empArray.Count;}
}
public object SyncRoot{
get{return this;}
}
public bool IsSynchronized{
get{return false;}
}
public IEnumerator GetEnumerator(){
return empArray.GetEnumerator();
}
public void Add(Employee newEmployee){
empArray.Add(newEmployee);
}
}
public class Employee{
public string EmpName;
public string EmpID;
public Employee(){}
public Employee(string empName, string empID){
EmpName = empName;
EmpID = empID;
}
}
Beispiel für einen Bestellauftrag
Sie können den folgenden Beispielcode ausschneiden und in eine Textdatei einfügen, die mit der Dateierweiterung .cs oder .vb umbenannt wurde. Kompilieren Sie die Datei mit dem C#- oder Visual Basic-Compiler. Führen Sie ihn dann mit dem Namen der ausführbaren Datei aus.
In diesem Beispiel wird anhand eines einfachen Szenarios veranschaulicht, wie eine Instanz eines Objekts erstellt und über die Serialize-Methode in einen Dateistream serialisiert wird. Der XML-Stream wird als eine Datei gespeichert, und diese Datei wird wieder eingelesen und mit Hilfe der Deserialize-Methode als Kopie des Originalobjekts rekonstruiert.
In diesem Beispiel wird eine Klasse mit der Bezeichnung PurchaseOrder serialisiert und dann wieder deserialisiert. Außerdem ist eine zweite Klasse mit der Bezeichnung Address enthalten, da das öffentliche Feld mit der Bezeichnung ShipTo als Address festgelegt sein muss. Ebenso ist eine OrderedItem-Klasse enthalten, da ein Array von OrderedItem-Objekten auf das OrderedItems-Feld festgelegt sein muss. Schließlich enthält eine Klasse mit der Bezeichnung Test den Code, der die Klassen serialisiert und deserialisiert.
Durch die CreatePO-Methode werden das PurchaseOrder-Klassenobjekt, das Address-Klassenobjekt und das OrderedItem-Klassenobjekt erstellt und die Werte für die öffentlichen Felder festgelegt. Mit Hilfe der Methode wird außerdem eine Instanz der XmlSerializer-Klasse konstruiert, die zum Serialisieren und Deserialisieren der PurchaseOrder verwendet wird. Beachten Sie, dass der Typ der Klasse, die serialisiert wird, durch den Code an den Konstruktor übergeben wird. Darüber hinaus wird durch den Code ein FileStream erstellt, der den XML-Stream in ein XML-Dokument schreibt.
Die ReadPo-Methode ist etwas einfacher. Dabei werden lediglich Objekte erstellt, die deserialisiert werden sollen, und ihre Werte werden ausgelesen. Wie auch bei der CreatePo-Methode müssen Sie zunächst einen XmlSerializer erstellen, der den Typ der zu deserialisierenden Klasse an den Konstruktor übergibt. Zum Lesen des XML-Dokuments ist auch eine FileStream-Klasse erforderlich. Rufen Sie die Deserialize-Methode mit der FileStream-Klasse als ein Argument auf, um die Objekte zu deserialisieren. Das deserialisierte Objekt muss in eine Objektvariable vom Typ PurchaseOrder umgewandelt werden. Der Code liest anschließend die Werte der deserialisierten PurchaseOrder. Beachten Sie, dass Sie auch die Datei PO.xml lesen können, die erstellt wurde, um die tatsächliche XML-Ausgabe anzuzeigen.
Imports System
Imports System.Xml
Imports System.Xml.Serialization
Imports System.IO
Imports Microsoft.VisualBasic
' The XmlRootAttribute allows you to set an alternate name
' (PurchaseOrder)of the XML element, the element namespace; by
' default, the XmlSerializer uses the class name. The attribute
' also allows you to set the XML namespace for the element. Lastly,
' the attribute sets the IsNullable property, which specifies whether
' the xsi:null attribute appears if the class instance is set to
' a null reference.
<XmlRootAttribute("PurchaseOrder", _
Namespace := "http://www.cpandl.com", IsNullable := False)> _
Public Class PurchaseOrder
Public ShipTo As Address
Public OrderDate As String
' The XmlArrayAttribute changes the XML element name
' from the the default of "OrderedItems" to "Items".
<XmlArrayAttribute("Items")> _
Public OrderedItems() As OrderedItem
Public SubTotal As Decimal
Public ShipCost As Decimal
Public TotalCost As Decimal
End Class
Public Class Address
' The XmlAttribute instructs the XmlSerializer to serialize the Name
' field as an XML attribute instead of an XML element (the default
' behavior).
<XmlAttribute()> _
Public Name As String
Public Line1 As String
' Setting the IsNullable property to false instructs the
' XmlSerializer that the XML attribute will not appear if
' the City field is set to a null reference.
<XmlElementAttribute(IsNullable := False)> _
Public City As String
Public State As String
Public Zip As String
End Class
Public Class OrderedItem
Public ItemName As String
Public Description As String
Public UnitPrice As Decimal
Public Quantity As Integer
Public LineTotal As Decimal
' Calculate is a custom method that calculates the price per item
' and stores the value in a field.
Public Sub Calculate()
LineTotal = UnitPrice * Quantity
End Sub
End Class
Public Class Test
Public Shared Sub Main()
' Read and write purchase orders.
Dim t As New Test()
t.CreatePO("po.xml")
t.ReadPO("po.xml")
End Sub
Private Sub CreatePO(filename As String)
' Creates an instance of the XmlSerializer class;
' specifies the type of object to serialize.
Dim serializer As New XmlSerializer(GetType(PurchaseOrder))
Dim writer As New StreamWriter(filename)
Dim po As New PurchaseOrder()
' Creates an address to ship and bill to.
Dim billAddress As New Address()
billAddress.Name = "Teresa Atkinson"
billAddress.Line1 = "1 Main St."
billAddress.City = "AnyTown"
billAddress.State = "WA"
billAddress.Zip = "00000"
' Set ShipTo and BillTo to the same addressee.
po.ShipTo = billAddress
po.OrderDate = System.DateTime.Now.ToLongDateString()
' Creates an OrderedItem.
Dim i1 As New OrderedItem()
i1.ItemName = "Widget S"
i1.Description = "Small widget"
i1.UnitPrice = CDec(5.23)
i1.Quantity = 3
i1.Calculate()
' Inserts the item into the array.
Dim items(0) As OrderedItem
items(0) = i1
po.OrderedItems = items
' Calculates the total cost.
Dim subTotal As New Decimal()
Dim oi As OrderedItem
For Each oi In items
subTotal += oi.LineTotal
Next oi
po.SubTotal = subTotal
po.ShipCost = CDec(12.51)
po.TotalCost = po.SubTotal + po.ShipCost
' Serializes the purchase order, and close the TextWriter.
serializer.Serialize(writer, po)
writer.Close()
End Sub
Protected Sub ReadPO(filename As String)
' Creates an instance of the XmlSerializer class;
' specify the type of object to be deserialized.
Dim serializer As New XmlSerializer(GetType(PurchaseOrder))
' If the XML document has been altered with unknown
' nodes or attributes, handles them with the
' UnknownNode and UnknownAttribute events.
AddHandler serializer.UnknownNode, AddressOf serializer_UnknownNode
AddHandler serializer.UnknownAttribute, AddressOf _
serializer_UnknownAttribute
' A FileStream is needed to read the XML document.
Dim fs As New FileStream(filename, FileMode.Open)
' Declare an object variable of the type to be deserialized.
Dim po As PurchaseOrder
' Uses the Deserialize method to restore the object's state with
' data from the XML document.
po = CType(serializer.Deserialize(fs), PurchaseOrder)
' Reads the order date.
Console.WriteLine(("OrderDate: " & po.OrderDate))
' Reads the shipping address.
Dim shipTo As Address = po.ShipTo
ReadAddress(shipTo, "Ship To:")
' Reads the list of ordered items.
Dim items As OrderedItem() = po.OrderedItems
Console.WriteLine("Items to be shipped:")
Dim oi As OrderedItem
For Each oi In items
Console.WriteLine((ControlChars.Tab & oi.ItemName & _
ControlChars.Tab & _
oi.Description & ControlChars.Tab & oi.UnitPrice & _
ControlChars.Tab & _
oi.Quantity & ControlChars.Tab & oi.LineTotal))
Next oi
' Reads the subtotal, shipping cost, and total cost.
Console.WriteLine((ControlChars.Cr & New String _
(ControlChars.Tab, 5) & _
" Subtotal" & ControlChars.Tab & po.SubTotal & ControlChars.Cr & _
New String(ControlChars.Tab, 5) & " Shipping" & ControlChars.Tab & _
po.ShipCost & ControlChars.Cr & New String(ControlChars.Tab, 5) & _
" Total" & New String(ControlChars.Tab, 2) & po.TotalCost))
End Sub
Protected Sub ReadAddress(a As Address, label As String)
' Reads the fields of the Address.
Console.WriteLine(label)
Console.Write((ControlChars.Tab & a.Name & ControlChars.Cr & _
ControlChars.Tab & a.Line1 & ControlChars.Cr & ControlChars.Tab & _
a.City & ControlChars.Tab & a.State & ControlChars.Cr & _
ControlChars.Tab & a.Zip & ControlChars.Cr))
End Sub
Protected Sub serializer_UnknownNode(sender As Object, e As _
XmlNodeEventArgs)
Console.WriteLine(("Unknown Node:" & e.Name & _
ControlChars.Tab & e.Text))
End Sub
Protected Sub serializer_UnknownAttribute(sender As Object, _
e As XmlAttributeEventArgs)
Dim attr As System.Xml.XmlAttribute = e.Attr
Console.WriteLine(("Unknown attribute " & attr.Name & "='" & _
attr.Value & "'"))
End Sub 'serializer_UnknownAttribute
End Class 'Test
[C#]
using System;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
// The XmlRootAttribute allows you to set an alternate name
// (PurchaseOrder) for the XML element and its namespace. By
// default, the XmlSerializer uses the class name. The attribute
// also allows you to set the XML namespace for the element. Lastly,
// the attribute sets the IsNullable property, which specifies whether
// the xsi:null attribute appears if the class instance is set to
// a null reference.
[XmlRootAttribute("PurchaseOrder", Namespace="http://www.cpandl.com",
IsNullable = false)]
public class PurchaseOrder
{
public Address ShipTo;
public string OrderDate;
// The XmlArrayAttribute changes the XML element name
// from the default of "OrderedItems" to "Items".
[XmlArrayAttribute("Items")]
public OrderedItem[] OrderedItems;
public decimal SubTotal;
public decimal ShipCost;
public decimal TotalCost;
}
public class Address
{
// The XmlAttribute instructs the XmlSerializer to serialize the Name
// field as an XML attribute instead of an XML element (the default
// behavior).
[XmlAttribute]
public string Name;
public string Line1;
// Setting the IsNullable property to false instructs the
// XmlSerializer that the XML attribute will not appear if
// the City field is set to a null reference.
[XmlElementAttribute(IsNullable = false)]
public string City;
public string State;
public string Zip;
}
public class OrderedItem
{
public string ItemName;
public string Description;
public decimal UnitPrice;
public int Quantity;
public decimal LineTotal;
// Calculate is a custom method that calculates the price per item
// and stores the value in a field.
public void Calculate()
{
LineTotal = UnitPrice * Quantity;
}
}
public class Test
{
public static void Main()
{
// Read and write purchase orders.
Test t = new Test();
t.CreatePO("po.xml");
t.ReadPO("po.xml");
}
private void CreatePO(string filename)
{
// Creates an instance of the XmlSerializer class;
// specifies the type of object to serialize.
XmlSerializer serializer =
new XmlSerializer(typeof(PurchaseOrder));
TextWriter writer = new StreamWriter(filename);
PurchaseOrder po=new PurchaseOrder();
// Creates an address to ship and bill to.
Address billAddress = new Address();
billAddress.Name = "Teresa Atkinson";
billAddress.Line1 = "1 Main St.";
billAddress.City = "AnyTown";
billAddress.State = "WA";
billAddress.Zip = "00000";
// Sets ShipTo and BillTo to the same addressee.
po.ShipTo = billAddress;
po.OrderDate = System.DateTime.Now.ToLongDateString();
// Creates an OrderedItem.
OrderedItem i1 = new OrderedItem();
i1.ItemName = "Widget S";
i1.Description = "Small widget";
i1.UnitPrice = (decimal) 5.23;
i1.Quantity = 3;
i1.Calculate();
// Inserts the item into the array.
OrderedItem [] items = {i1};
po.OrderedItems = items;
// Calculate the total cost.
decimal subTotal = new decimal();
foreach(OrderedItem oi in items)
{
subTotal += oi.LineTotal;
}
po.SubTotal = subTotal;
po.ShipCost = (decimal) 12.51;
po.TotalCost = po.SubTotal + po.ShipCost;
// Serializes the purchase order, and closes the TextWriter.
serializer.Serialize(writer, po);
writer.Close();
}
protected void ReadPO(string filename)
{
// Creates an instance of the XmlSerializer class;
// specifies the type of object to be deserialized.
XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder));
// If the XML document has been altered with unknown
// nodes or attributes, handles them with the
// UnknownNode and UnknownAttribute events.
serializer.UnknownNode+= new
XmlNodeEventHandler(serializer_UnknownNode);
serializer.UnknownAttribute+= new
XmlAttributeEventHandler(serializer_UnknownAttribute);
// A FileStream is needed to read the XML document.
FileStream fs = new FileStream(filename, FileMode.Open);
// Declares an object variable of the type to be deserialized.
PurchaseOrder po;
// Uses the Deserialize method to restore the object's state with
// data from the XML document. */
po = (PurchaseOrder) serializer.Deserialize(fs);
// Reads the order date.
Console.WriteLine ("OrderDate: " + po.OrderDate);
// Reads the shipping address.
Address shipTo = po.ShipTo;
ReadAddress(shipTo, "Ship To:");
// Reads the list of ordered items.
OrderedItem [] items = po.OrderedItems;
Console.WriteLine("Items to be shipped:");
foreach(OrderedItem oi in items)
{
Console.WriteLine("\t"+
oi.ItemName + "\t" +
oi.Description + "\t" +
oi.UnitPrice + "\t" +
oi.Quantity + "\t" +
oi.LineTotal);
}
// Reads the subtotal, shipping cost, and total cost.
Console.WriteLine(
"\n\t\t\t\t\t Subtotal\t" + po.SubTotal +
"\n\t\t\t\t\t Shipping\t" + po.ShipCost +
"\n\t\t\t\t\t Total\t\t" + po.TotalCost
);
}
protected void ReadAddress(Address a, string label)
{
// Reads the fields of the Address.
Console.WriteLine(label);
Console.Write("\t"+
a.Name +"\n\t" +
a.Line1 +"\n\t" +
a.City +"\t" +
a.State +"\n\t" +
a.Zip +"\n");
}
protected void serializer_UnknownNode
(object sender, XmlNodeEventArgs e)
{
Console.WriteLine("Unknown Node:" + e.Name + "\t" + e.Text);
}
protected void serializer_UnknownAttribute
(object sender, XmlAttributeEventArgs e)
{
System.Xml.XmlAttribute attr = e.Attr;
Console.WriteLine("Unknown attribute " +
attr.Name + "='" + attr.Value + "'");
}
}
Die XML-Ausgabe könnte mit dem folgenden Beispiel vergleichbar sein.
<?xml version="1.0" encoding="utf-8"?>
<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.cpandl.com">
<ShipTo Name="Teresa Atkinson">
<Line1>1 Main St.</Line1>
<City>AnyTown</City>
<State>WA</State>
<Zip>00000</Zip>
</ShipTo>
<OrderDate>Wednesday, June 27, 2001</OrderDate>
<Items>
<OrderedItem>
<ItemName>Widget S</ItemName>
<Description>Small widget</Description>
<UnitPrice>5.23</UnitPrice>
<Quantity>3</Quantity>
<LineTotal>15.69</LineTotal>
</OrderedItem>
</Items>
<SubTotal>15.69</SubTotal>
<ShipCost>12.51</ShipCost>
<TotalCost>28.2</TotalCost>
</PurchaseOrder>
Siehe auch
Einführung in die XML-Serialisierung | Steuerung der XML-Serialisierung mit Attributen | Attribute für die Steuerung der XML-Serialisierung | XmlSerializer-Klasse